Как правильно применить Symfony Validator?

Всем привет, скачал компонент Symfony Validato пытаюсь прикрутить к себе. у меня есть класс, работающий с API CRM, на первой страничке заполняются поля, я делаю так
$shippingFirstName = $_REQUEST['shippingFirstName'];
	    $shippingLastName = $_REQUEST['shippingLastName'];
        $validator = Validation::createValidator();
	    $constraint = new Assert\Collection(array(
	        'shippingFirstName' => array(
                new Assert\Length(array('min' => 10)),
                new Assert\NotBlank(['message' => 'The value of the "First Name" field should not be blank']),
                new Assert\Email(['message' => 'The email {{ value }} is not a valid email.']),
            ),
            'shippingLastName' => array(
                new Assert\Length(array('min' => 10)),
                new Assert\NotBlank(['message' => 'The value of the "Last Name" field should not be blank']),
                new Assert\Email(['message' => 'The email {{ value }} is not a valid email.']),
            )
        ));
        $violations = $validator->validate(['shippingFirstName' => $shippingFirstName, 'shippingLastName' => $shippingLastName], $constraint);
        if (count($violations) !== 0 ) {
            foreach ($violations as $violation) {
                echo $violation->getMessage().'<br>';
            }
            exit;
        }

Насколько это правильно, неправильно? Заранее спасибо
  • Вопрос задан
  • 770 просмотров
Пригласить эксперта
Ответы на вопрос 1
voronkovich
@voronkovich
Я бы логику построения ограничения вынес в отдельный класс, что-нибудь вроде ShippingConstraint, для повторного использования (и чтобы не засорять контроллер деталями валидации). См. symfony.com/doc/current/validation/custom_constrai...

Тогда ваш код будет выглядеть как-то так:

$validator = Validation::createValidator();

$violations = $validator->validate([
    'shippingFirstName' =>$_REQUEST['shippingFirstName'],
    'shippingLastName' => $_REQUEST['shippingFirstName'],
], new ShippingConstraint());

if (count($violations) !== 0 ) {
    foreach ($violations as $violation) {
        echo $violation->getMessage().'<br>';
    }
    exit;
 }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы