教义可嵌入



我正在尝试为值对象实现 doctrine2 可嵌入功能。

这是简单的片段,根据教义官方文档略有修改:

/** @Entity */
class User
{
    /** @Embedded(class = "Address") */
    protected $address;
   /** @Column(type = "string") */
    protected $street;
}
/** @Embeddable */
class Address
{
    /** @Column(type = "string") */
    protected $street;
    /** @Column(type = "string") */
    protected $postalCode;
    /** @Column(type = "string") */
    protected $city;
    /** @Column(type = "string") */
    protected $country;
}

当我尝试从嵌入对象访问属性时,我收到"无法访问受保护的属性"错误 - 这是意料之中的。可嵌入对象应仅由其基实体类读取,并且不应修改,因为它们是不可变的(遵循域驱动的设计准则)。我不明白的是,由于它们是私有/受保护的,我如何读取它们的属性?这里涉及任何PHP魔法吗?我试图使用不同的 getter,例如:

getStreet(Address $address){
    $this->street = $address->street;
}

但在实体管理器实例上调用持久和刷新方法之前,总是会出现错误。

谢谢。

如果要

从用户开始检索街道值,则应在 User 类中创建一个 getter 方法,该方法在内部可以访问该地址并执行以下操作:

class User
{
    public getAddressStreet() {
        $this->address->getStreet();
    }
}

或类似的东西。

在嵌入式类上使用getters

class Address
{
    ...
    public function getStreet(){
        return $this->street;
    }
    ...
}

然后,您的方法会更改

getStreet(Address $address){
    $this->street = $address->getStreet();
}

相关内容

  • 没有找到相关文章

最新更新