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覆盖parent时
在我的例子中,$content不会持久存在!空字段…
从孩子中删除$content
如果我从InternalMessage字段中删除$content持久化,则验证不再起作用.
这是一个错误还是什么?我开了一个issue,但不知道它是不是正确的地方(我是github如何工作的新手).
太糟糕了,我意识到Doctrine继承是错误的(从发电机本身开始……).
最佳答案 Afaik,它无法完成,Doctrine2继承策略不允许您从MappedSuperClass重新定义属性.
由于Reflection系统,这应该是限制.
最好的办法是提取验证配置并将其移动到独立的XML或YML文件中.
您可能还想为ORM执行此操作(但您需要为Bundle中的所有实体执行此操作),因为它将为您提供更大的灵活性.