вот такая ситуация:
есть правила:
Код: Выделить всё
public function rules()
{
return [
[['login', 'password'], 'trim'],
[['login', 'password'], 'required', 'message' => "Введите данные"],
['login', 'validateLogin'],
['password', 'validatePassword'],
];
}
public function validateLogin($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user) {
$this->addError('login', 'Не найден пользователь с таким логином');
}
}
}
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if ($user) {
if (!Yii::$app->getSecurity()->validatePassword($this->password, $user->password)) {
$this->addError('password', 'Не верный пароль');
}
}
}
}
Код: Выделить всё
<?php $form = ActiveForm::begin(
[
'enableAjaxValidation' => true
]
); ?>
<?= $form->field($model, 'login')->textInput() ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= Html::submitButton('Войти', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
<?php ActiveForm::end(); ?>
вводим в поле login чтото ... идет запрос ajax который возвращает что мол введите данные (required)
вводим пароль ... идет запрос ajax который возвращает
{"_userloginform-login":["Не найден пользователь с таким логином"]}
но т.к. фокус в поле пароль ошибка под полем login не высветится пока мы не нажмем Войти или не клацнем в поле и уберем фокус.
в стандартных средствах нет такого "показывай ошибки везде где видишь" ... или только в ручную обрабатывать по событию ... ?
upd: да можно разбить правила по порядку .. .сначала required login потом валидация существования а потом по порядку пароль ...но бывают и другие ситуации когда от выбранного radioBtn надо чтото важным сделать и тд ... так что вопрос именно не как правила переписать под данную ситуацию а как AF заставить показывать пришедшие ошибки все