Остановить валидационную проверку цепных правил при первом сбое

#php #validation

#php #проверка

Вопрос:

Я настроил цепочку правил проверки в valitron, последним из которых является пользовательское правило.

 $this->validator->rule('required', ['id'])->rule('integer', ['id'])->rule(function($field, $value, $params, $fields) use ($input) {
        // My custom code here
    }, ['id'])->message("Not a valid Launcher ID");
  

Проблема в том, что я предпочитаю НЕ выполнять свою пользовательскую проверку, если id пуст или не является числом. Другими словами: я хочу остановить оценку при первом сбое цепочки.
Как я могу это сделать?

Ответ №1:

     /**
     * Should the validation stop a rule is failed
     * @param bool $stop
     */
    public function stopOnFirstFail($stop = true)
    {
        $this->stop_on_first_fail = (bool)$stop;
    }
  

https://github.com/vlucas/valitron/blob/master/src/Valitron/Validator.php#L1242

Просто вызовите $this->validator->stopOnFirstFail() перед проверкой.

Комментарии:

1. Спасибо! Однако это не совсем то, что я искал. Извините, я не понял. Я хочу остановиться после первого сбоя в определенной цепочке. Используя ваш метод, он останавливается при любом другом сбое правила, даже при других параметрах.

2. @Lorenzo Глядя на исходный код, Valitron не имеет встроенных опций для цепочек правил. Ваш пример на самом деле не добавляет правила в виде цепочки, он просто добавляет их по отдельности одно за другим. Чтобы получить желаемое поведение, вам придется написать его самостоятельно. Возможно, вложив второй валидатор в правило в «родительском» валидаторе.