2015-07-31 2 views
4

Я люблю использовать Validation аннотаций в Symfony с моей огромной модели объекта следующим образом:Validation для дополнительных свойств в Symfony

/** 
* @var string 
* @ORM\Column(type="string", length=255, nullable=false, name="name") 
* 
* @Assert\NotBlank(message="Name must not be empty") 
* @Assert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters") 
*/ 
private $name; 

Это гарантирует, что «имя» никогда не бывает пустой, пустой или имеет < 2 или > 255 символов.

Но как добиться этого, если скажем, что есть такое же поле, как описание, для которого применяются одни и те же правила, но только это необязательное свойство?

Я знаю, конечно, что могу писать функции Callbank, имея свои собственные ограничения и т. Д. ... но это заставит меня создать свою собственную логику для всех существующих валидаторов (NotBlank, Length, Number, Valid aso) ,

Я бы искать что-то подобное, как:

/** 
* @var string 
* @ORM\Column(type="string", length=255, nullable=true, name="description") 
* 
* @OptionalAssert\NotBlank(message="Name must not be empty") 
* @OptionalAssert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters") 
*/ 
private $description; 

Так описание может быть пустым, но если это не пустой, то он не должен быть пустым и должно быть> 2 или < 255 символов.

Я думал о создании пользовательского ограничения для этого, но я могу каким-то образом передать стандартные валидаторы и там параметры в свой собственный валидатор, чтобы избежать воссоздания \ NotBlank \ Length и т. Д. Все самостоятельно и просто повторно использовать стандарт из них?

Благодаря

+0

Какой бы совершенно нормально для меня, но это больно мне много, чтобы расширить каждое стандартное ограничение и стандартный валидатор, регистрируя его как услугу и т. д. Я ищу простой метод для добавления некоторой логики if ($ value === null) {return true;} else {continue with standard}. – LBA

+0

Я думаю, что вы пропускаете '@ Assert/NotNull()' на первом, второй, я думаю, будет отлично минус 'Необязательная' часть' @Assert() 'с' @ Assert/NotNull() 'не входит. 'NotBlank()' и ['Length (min)'] (http://symfony.com/doc/current/reference/constraints/Length.html#min) не будут принудительно использовать «NotNull()». –

+0

@JaredFarrish большое спасибо! Я пробовал его с длиной, и он работает, как ожидалось. Поэтому мне придется попробовать каждый стандартный валидатор, как он себя ведет, и мне нужно создать специальный валидатор для тех, где задействована нулевая проверка. Если вы предоставите свой ответ, я могу отметить его зеленым ;-) – LBA

ответ

2

Я думаю, что вам не хватает @Assert/NotNull() на первой, второй один я думаю, что было бы хорошо минус Optional часть @Assert() так @Assert/NotNull() не входит. NotBlank() и Length(min) не будут обеспечивать соблюдение NotNull().

Таким образом, вы бы что-то подобное для name:

/** 
* @var string 
* @ORM\Column(type="string", length=255, nullable=false, name="name") 
* 
* @Assert\NotNull(message="Name must not be empty") 
* @Assert\NotBlank(message="Name must not be empty") 
* @Assert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters") 
*/ 
private $name; 

И минус @Assert/NotNull() для description:

/** 
* @var string 
* @ORM\Column(type="string", length=255, nullable=true, name="description") 
* 
* @Assert\NotBlank(message="Name must not be empty") 
* @Assert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters") 
*/ 
private $description; 
+0

Помощник подсказки: «Length не будет принудительно выполнять NotNull()» – LBA

Смежные вопросы