Я пытаюсь реализовать доктрину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;
}
но всегда получайте ошибку, прежде чем вызывать методы persist и flush для экземпляра менеджера сущностей.
Благодарю.
использование getters
на встроенном классе.
class Address
{
...
public function getStreet(){
return $this->street;
}
...
}
Затем ваш метод меняется
getStreet(Address $address){
$this->street = $address->getStreet();
}
Других решений пока нет …