Yii 2 Ajax Валидация Форм

Здравствуйте!

Извиняюсь сразу что не написал в соответсвующий раздел, но он для меня закрыт, плюс я не совсем хорошо знаю английский.

Собственно я решил попробовать Yii 2, и создать простое приложение для себя, чтобы с ним ознакомится.

Так как обычно формы я делаю с AJAX валидацией, я решил тоже самое сделать и на Yii 2. Но чтобы много не писать, скажу сразу, ничего не получилось.

Собственно вопросы:

  • Как в Yii 2 правильно работать с AJAX формами?

  • Что нужно возвращать в ответ на AJAX запрос формы в момент невалидности модели?


Json::encode($model->getErrors());

не обрабатывается формой. А старого метода CActiveForm::validate() больше нету.

Покажите пожалуйста пример где форма отправляется через AJAX, выводит нужные ошибки, и показывает после успешной отправки например ответ с сервера что мы скидываем.

Спасибо!

Раньше я делал вот так:




if(!$model->validate()){

                foreach($model->getErrors() as $attribute=>$errors)

                    $error[CHtml::activeId($model,$attribute)]=$errors;

                echo CJSON::encode($error);

                Yii::app()->end();

              }



Данная конструкция делает аналогичный вывод CActiveFrom::validate().

Подозреваю что надо обрабатывать ошибки самому (ну мне так удобнее) при ajax валидации.

В 1.1 делал так:




<?php echo CHtml::ajaxSubmitButton($model->isNewRecord ? 'Create' : 'Save', Yii::app()->request->url, array(

                'dataType' => 'json',

                'type' => 'post',

                'success' =>

                'js:function (data) {

                 if(!$.isEmptyObject(data)) {

                      $.each(data, function(key, val) {

                        $("#feeds-form #"+key+"_em_").text(val+" ");

                        $("#feeds-form #"+key+"_em_").parent(".error_wrapter").addClass("error");

                                $("#feeds-form #"+key+"_em_").css(\'display\',\'block\');

                                      });

                  };

                 if(data.status=="success"){

                                           hideAllMessages();

                                          }

                else {

                      hideAllMessages();

                  };

                  }',

            ), array(

                'id' => 'feeds-form_submit_' . rand(1, 255), // Need a unique id or they start to conflict with more than one load.

            ));?>



Вообщем как то так. Думаю перенести на yii2 не составит труда.

Спасибо за код! Я знаю про то как работает CActiveForm::validate() но дело в том что в Yii 2 нет вообще Html::activeId и теперь непонятно что нужно возвращать в ответ на ajax валидацию.