Вложенные ограничения Symfony для проверки

Я столкнулся с любопытной проблемой. Допустим, мы хотим подтвердить некоторый идентификатор. Валидация должна пройти 10 различных условий (ограничений), и мы должны сделать это в 10 разных местах. Я думал, что могу спасти себя, написав несекретный код, вложив одну проверку в другую.

Вот что я сделал:

  • Я создал новое пользовательское ограничение проверки под названием IdParameter
  • Я зарегистрировал файл IdParameterValidator.php как сервис и добавил в него сервис валидатора
  • Я поставил еще один процесс проверки (в нашем примере 10 ограничений, которые мне придется использовать в 10 разных местах) — я использовал Constraints \ Collection, чтобы сделать это, так что это выглядит примерно так:

    <?php
    
    namespace Awesome\BlogBundle\Validator\Constraints;
    
    use Symfony\Component\Validator;
    
    class IdParameterValidator extends Validator\ConstraintValidator
    {
    private $_data = array();
    private $_validator;public function __construct(Validator\Validator\RecursiveValidator $validator)
    {
    $this->_validator = $validator;
    }
    
    public function validate($value, Validator\Constraint $constraint)
    {
    /* Preparing object of constraints */
    $postIDConstraints = new Validator\Constraints\Collection(array(
    'postId' => array(
    new Validator\Constraints\Type(array(
    'type' => 'integer',
    'message' => 'This ain\'t no integer man!'
    )),
    new Validator\Constraints\Range(array(
    'min' => 1,
    'minMessage' => 'Post id is not valid'
    ))
    )
    ));
    
    /* Validating ID */
    $this->_data['errors'] = $this->_validator->validate(array('postId' => $value), $postIDConstraints);
    
    /* Checking validation result */
    if(count($this->_data['errors']) > 0) {
    $this->context->buildViolation($constraint->message)->addViolation();
    }
    }
    }
    

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

$postIDConstraints = new Validator\Constraints\Collection(array(
'postId' => array(
new myValidator\Constraints\IdParameter()
)
));

/* Validating postID */
$this->_data['errors'] = $this->_validator->validate(array('postId' => (int)$postID), $postIDConstraints);

Мне интересно, если это правильный подход?

С уважением,
Р.

P.S
Я всегда комментирую свой код — я не помещал здесь комментарии, чтобы сохранить его в чистоте.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector