2017-02-02 5 views
1

Скажем, я хочу, чтобы проверить переменную электронной почты, которое передается в действие контроллера:Как завершить проверку составного поля, когда ограничение типа возвращает нарушение?

use Symfony\Component\Validator\Constraints\Collection; 
use Symfony\Component\Validator\Constraints\Email; 
use Symfony\Component\Validator\Constraints\Length; 
use Symfony\Component\Validator\Constraints\NotBlank; 
use Symfony\Component\Validator\Constraints\Type; 

$constraints = new Collection([ 
    'fields' => [ 
     'email' => [ 
      new Type([ 
       'type' => 'string', 
       'message' => static::ERROR_EMAIL_INVALID, 
      ]), 
      new NotBlank([ 
       'message' => static::ERROR_EMAIL_REQUIRED, 
      ]), 
      new Email([ 
       'message' => static::ERROR_EMAIL_INVALID, 
      ]), 
      new Length([ 
       'max'  => 128, 
       'maxMessage' => static::ERROR_EMAIL_TOO_LONG, 
      ]), 
     ], 
    ], 
]); 

Если пользователь отправляет email[]=1, то UnexpectedTypeException будет брошен, и я должен обрабатывать вручную, вернуть переведенную сообщение, впрыснуть переводчик и т.д.

есть ли способ сказать валидатор Symfony для проверки Type первых и игнорировать другие ограничения, если Type не удается (только возвращает ошибку Type)?

ответ

1

Для того, чтобы избежать несколько сообщений об ошибках, которые могли бы использовать функции GroupSequence, как описано здесь:

How to Sequentially Apply Validation Groups

Надеется, что это поможет

+1

Немного слишком сложны для моего случая использования, но, безусловно, выглядит как правильное решение от Symfony (при условии, что нет более простого). – gskema