在Symfony 2 / Doctrine 2中不使用MappedSuperclass的字段?

时间:2012-08-04 07:18:38

标签: symfony doctrine-orm symfony-forms

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继承是错误的(从生成器本身开​​始......)。

1 个答案:

答案 0 :(得分:2)

Afaik,无法完成,Doctrine2继承策略不允许您从MappedSuperClass重新定义属性。

这应该是因为反射系统的限制。

您最好的办法是提取验证配置并将其移至独立的XMLYML文件。

你可能也想为你的ORM做这件事(但你需要为你的Bundle中的所有实体做这件事),因为它会让你更灵活。