Как выполнить правило только после выполнения предыдущих?
Здравствуйте. Казалось бы, вопрос простой, кейс должен быть частый, но найти информацию не могу второй день... Суть в чем. Вот есть моделька. В ней есть правила. Первое правило указывает что поля обязательные. Второе правило использует самописную функцию, которая проверяет некий результат полей из первого правила. Все работает почти как нужно, работают сразу все правила. То есть, если у меня не заполнены какие-то поля из верхнего правила, нижнее тоже срабатывает и дает в массив ошибок и свою ошибку. А так не правильно, так как нижнее правило будет всегда давать ошибку если какое-то верхнее не заполнено. Нужно сделать так, чтобы валидатор останавливался если в верхнем правиле были ошибки, и не доходил до нижнего.
А вот если все поля заполнены и верхнее правило прошло - тогда уже давать работу нижнему.
Отправляю все поля пустые, валидатор мне возвращает по всем полям ошибки.. Не понимаю, что я делаю не так? Изначально выше всего было два правила со скипом, это пустой токен, и токен с моим валидатором. Хотел обойтись одним правилом, моим валидатором, но оказалось что пустые поля он не обрабатывает. По этому первым было на проверку поля токен, вторым уже была проверка на его реальность. Только у этих был скип, но по факту все равно шли все ошибки..
public function validateToken($attribute, $params) {
$user = ExtUser::find()->where(['token' => $this->token])->one();
if (!$user) {
$this->addError($attribute, 'TOKEN ERROR');
}
}
Поиск юзера по токену, если не найдено - ошибка.
Я ставил это правило самым первым, остальные правила скипал. По итогу мне валидатор про токен ничего не говорил, за то все остальные поля говорил (в случае когда обязательные поля не заполнены)
Артем, Спасибо большое за помощь! Не просто ответил на вопрос по сабжу, а многое подсказал, и рассказал как лучше сделать. Благодаря таким людям, которые делятся собственным опытом за просто так, новичкам проще решать не простые (для них) вопросы.
Сам тоже стараюсь не проходить мимо, если есть какой-то вопрос в силах моей компетенции :)