Symfony2:是否可以在界面上放置验证注释?

时间:2012-01-14 20:38:54

标签: symfony

说我有界面:

namespace Acme\Bundle\FooBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;

interface IFoo {

    /**
     * @Assert\NotBlank
     * @Assert\MaxLength(3000)
     */
    function getBody();

}

两个类实现了接口,我希望这些类也能够使用getBody声明上的验证注释。 (即我不想在实现IFoo的每个子类中复制验证代码,因为它违反了DRY)。

这样做会给我以下例外:

  

尝试调用抽象方法Acme \ Bundle \ FooBundle \ Entity \ IFoo :: getBody()

有人知道这是可能的,还是有任何变通方法?

2 个答案:

答案 0 :(得分:1)

似乎你无法注释一个接口,github上有一个针对这个问题打开的票证:

https://github.com/symfony/symfony/issues/2841

答案 1 :(得分:-1)

我认为您不能对方法声明使用验证,因为它们应该与属性一起使用。不过,您可以使用抽象mapped superclass

的内容
/** @MappedSuperclass */
abstract class Foo implements FooInterface
{
    /** @Column(type="string")
     *  @Assert\NotBlank
     *  @Assert\MaxLength(3000)
     */
    protected function $body;

    // rest of the class
}

然后你可以从这个扩展你的其他类。