4

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从孩子身上移除

如果我$contentInternalMessage字段中删除是持久的,而验证不再起作用。

这是一个错误还是什么?我打开了一个问题,但不知道它是否是正确的地方(我对 github 的工作方式不熟悉)。

太糟糕了,我意识到 Doctrine 继承是错误的(从生成器本身开​​始......)。

4

1 回答 1

2

Afaik,这是做不到的,Doctrine2 继承策略不允许您从MappedSuperClass.

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

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

您可能还想为您的 ORM 执行此操作(但您需要为 Bundle 中的所有实体执行此操作),因为它可以让您更加灵活。

于 2012-08-24T16:50:11.550 回答