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 и поле все равно будет необязательным.

Другие вопросы по тегам