t-alexashka
@t-alexashka
Сразу пишу legacy код

Почему не срабатывает when в rule?

Привет друзья.

Есть правило в форме настроек:
['value', 'integer', 'min' => '1', 'max' => '9', 'when' => function($m) { return $m->param == 'sku_max'; }],

т.е. дословно - если параметр называется sku_max то он только число 1..9. Но почему то это правило срабатывает для любого названия параметра. Из за чего не срабатывает when?
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
t-alexashka
@t-alexashka Автор вопроса
Сразу пишу legacy код
оказывается все работало как надо на стороне пхп. а вот клиентская валидация игнорирует when, отсюда и не пускало дальше. решение - выключить клиентскую валидацию:
'enableClientValidation' => false,
в параметрах формы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
проблема не в правиле, если у Вас отрабатывает это правило значит действительно $m->param == 'sku_max' возвращает true. Тут нужно дебажить код, возможно у Вас по умолчанию param имеет значение 'sku_max', и Вы например не загружаете в модель новое название параметра
Ответ написан
OKyJIucT
@OKyJIucT
Sunshine reggae
Вместо "value" надо указывать название вашего параметра "param", ведь его вы проверяете на равенство значению 'sku_max'

['param', 'integer', 'min' => '1', 'max' => '9', 'when' => function($m) {
    return $m->param == 'sku_max'; 
}],


А вообще это можно сделать проще
['param', 'in', 'range' => range(1, 9)],
Ответ написан
Ваш ответ на вопрос

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

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