0

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

这是一个简单的片段,根据学说官方文档稍作修改:

/** @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 魔法吗?我试图使用不同的吸气剂,例如:

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

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

谢谢。

4

2 回答 2

0

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

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

或类似的东西。

于 2019-06-10T15:57:54.893 回答
0

getters在嵌入式类上使用。

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

然后,你的方法改变了

getStreet(Address $address){
    $this->street = $address->getStreet();
}
于 2017-01-31T16:43:08.120 回答