В Yii2 у меня есть условная проверка в model.php. Когда я пишу в текстовом поле что-то, что не проходит проверку, после выхода из поля не появляется сообщение об ошибке. Только после щелчка в create появляется сообщение об ошибке. Что мне нужно сделать, чтобы сообщение появилось после записи чего-либо в поле.

<?php
['state', 'required', 'when' => function ($model) {
    return $model->country == 'USA';
}, 'whenClient' => "function (attribute, value) {
    return $('#country').val() == 'USA';
}"]
0
yii2__ 28 Авг 2017 в 15:25

3 ответа

Лучший ответ

В вашей модели:

 public function rules()
 {
    return [
        ['state', 'required', 'targetClass' => '\backend\models\State', 
        'message' => 'Your message here'],
    ];
 }

Я не уверен, что ваша модель находится в бэкэнде, поэтому вы можете исправить это, как хотите.

В контроллере вы должны создать такую функцию:

public function actionValidation(){
    $model = new State();
    if(Yii::$app->request->isAjax && $model->load(Yii::$app->
    request->post())){
        Yii::$app->response->format = 'json';
        return ActiveForm::validate($model);
    }     
}

Еще один шаг, в вашей форме в начале:

<?php $form = ActiveForm::begin(
                [
                    'enableAjaxValidation' => true,
                    'validationUrl' => Url::toRoute('state/validation')
                ]
        ); ?>

Будьте осторожны, в приведенном выше коде я написал «состояние / проверка», «состояние» - это имя контроллера, в который вы помещаете действие проверки.

0
Marcin 29 Авг 2017 в 10:43

Вы должны установить enableAjaxValidation в ActiveForm

Например:

$form = ActiveForm::begin([
    'id' => 'contact-form',
    'enableAjaxValidation' => true,
]);
0
Simon Bran 28 Авг 2017 в 12:58

Может быть, я описал проблему не так хорошо, поэтому я попробую еще раз. Проблема в том, что условная проверка работает только после щелчка при сохранении / создании.

0
yii2__ 29 Авг 2017 в 08:08