Symfony2 Проверка необязательного поля
В моей форме у меня есть поле с обязательным параметром, установленным в false, это поле является необязательным.
Тем не менее, я хотел бы иметь проверку notBlank для этого поля, когда поле используется:
@Assert\NotBlank(
* message="The name field can't be blank",
* groups={"flow_poemDataCollector_step1"}
* )
Прямо сейчас я не могу использовать ограничение проверки NotBlank, потому что это приведет к сбою проверки моей формы, когда поле не используется.
Я пытался что-то добавить случайное значение в поле в слушателе onPostBindRequest, но это сложно и не удалось заставить его работать. Я не уверен, что это правильный путь.
Вот что я попробовал: ($form это объект Symfony\Component\Form\FormInterface)
$form = $event->getForm();
$formData = $form->getData();
$formData->setUserName("foo");
$form = $form->setData($formData);
Но затем я получаю сообщение об ошибке, что я не могу вызвать isValid() в несвязанной форме.
Как я могу достичь своей цели? то есть. Проверка поля только в некоторых случаях.
5 ответов
Лучший способ добиться этого - использовать средство проверки обратного вызова в вашей организации. Поскольку этот обратный вызов определен в вашей сущности, он имеет доступ ко всем свойствам. Через ExecutionContext вы можете установить нарушения по мере необходимости.
Это старый вопрос, но, похоже, теперь мы можем сделать это следующим образом:
@Assert\Optional(
@Assert\NotBlank(
message="The name field can't be blank",
groups={"flow_poemDataCollector_step1"}
)
)
ссылка: http://symfony.com/doc/2.7/reference/constraints/Collection.html
Хм. Мне пришлось перечитать ваш вопрос несколько раз, потому что что-то в нем не является логически обоснованным.
Если вы хотите, чтобы поле не было обязательным, используйте NotBlank
ограничение не имеет смысла. Как поле может быть не обязательным и обязательным одновременно?
Если все, что вам нужно, это то, что если что-то введено в это поле не состоит только из пробелов, то вам не нужно NotBlank
ограничение вообще, потому что Symfony обрезает ввод пользователя по умолчанию, так что в конечном итоге он ничего не будет введен.
Если вы хотите, чтобы поле было необязательным, вы можете:
new Assert\Length(array('min' => 0))
потому что пропуск поля из ограничения вызовет непредвиденную ошибку поля.
закончили здесь поиском того, как сделать поле необязательным и, если введено, подтвержденным, как необязательный адрес электронной почты:
из документации Symfony:
Как и большинство других ограничений, пустые и пустые строки считаются допустимыми значениями. Это позволяет им быть необязательными значениями. Если значение является обязательным, обычным решением является объединение этого ограничения с NotBlank.
https://symfony.com/doc/current/reference/constraints/Email.html
так что решение просто проверить как
Email
и поле все равно будет необязательным.