#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 не имеет встроенных опций для цепочек правил. Ваш пример на самом деле не добавляет правила в виде цепочки, он просто добавляет их по отдельности одно за другим. Чтобы получить желаемое поведение, вам придется написать его самостоятельно. Возможно, вложив второй валидатор в правило в «родительском» валидаторе.