A MappedSuperclass
:
/** @ORM\MappedSuperclass */
abstract class AbstractMessage
{
/** @ORM\Column(type="text", nullable=true) */
protected $content;
}
子子类,重新定义$content
以添加一些自定义验证断言:
/** @ORM\Entity */
class InternalMessage extends AbstractMessage
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Assert\NotBlank(message="Internal message title is required.")
*/
protected $content;
/** @return integer */
public function getId() { return $this->id; }
/**
* @param string $content
* @return InternalMessage
*/
public function setContent($content)
{
$this->content = $content;
return $this;
}
/** @return string */
public function getContent() { return $this->content; }
}
$content
覆盖父在我的例子中,$content
没有被保留! null
字段......
$content
如果我从$content
字段移除InternalMessage
字段,则验证不再有效。
这是一个错误还是什么?我开了一个issue,但不知道它是不是正确的地方(我是github如何工作的新手)。
太糟糕了,我意识到Doctrine继承是错误的(从生成器本身开始......)。
答案 0 :(得分:2)
Afaik,无法完成,Doctrine2继承策略不允许您从MappedSuperClass
重新定义属性。
这应该是因为反射系统的限制。
您最好的办法是提取验证配置并将其移至独立的XML
或YML
文件。
你可能也想为你的ORM做这件事(但你需要为你的Bundle中的所有实体做这件事),因为它会让你更灵活。