Symfony2: Можно ли разместить аннотации проверки на интерфейсе? - PullRequest
0 голосов
/ 15 января 2012

Скажите, у меня есть интерфейс:

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 ]

1 голос
/ 15 января 2012

Кажется, что вы не можете аннотировать интерфейс, на github открыт запрос на эту проблему:

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

0 голосов
/ 15 января 2012

Я не думаю, что вы можете использовать проверку для объявлений методов, так как они должны использоваться со свойствами. Для этого вы можете использовать абстрактный сопоставленный суперкласс .

Что-то вроде

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

    // rest of the class
}

Затем вы можете расширить другие классы этого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...