Yii2 не работает ajax validation

111
30 июля 2019, 20:00

Не могу разобраться с валидацией формы при отправке ajax. У меня есть виджет с формой, во вьюхе которого находится ActiveForm.

//Это виджет формы
<?php
namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
use app\models\AppForm;
use app\models\ApplicationDAO;
use Yii;
class ApplicationForm extends Widget{
    public function run(){
        $model = new AppForm();
        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
             $model->id = Yii::$app->user->id;// добавляем id 
             $applicationDAO = new ApplicationDAO();
        if($applicationDAO->create($model)) {
                return '1';
        } else { 
            Yii::$app->response->format = Response::FORMAT_JSON;
            return ActiveForm::validate($model);
         }
       }
         return $this->render('apform');
    }
}

Это вьюха виджета (на деле полей больше)

<?php
use yii\helpers\Html;
use yii\helpers\Url;
use yii\widgets\ActiveForm;
use yii\widgets\MaskedInput;
?>
  <?php $form = ActiveForm::begin([
    'id' => 'create_application',
    //'validationUrl' => Url::toRoute(['service/verify']),
    'enableAjaxValidation' => true,
]); ?>
      <?= $form->field($model, 'name') ?>
      <?= $form->field($model, 'phone') ?>
    <div class="form-group">
           <?= Html::submitButton('Отправить', ['class' => 'button_form']) ?>
    </div>
  <?php ActiveForm::end(); ?>
</div>

Если это важно, то код ajax:

$('#create_application').on('submit', function(event){  
    event.preventDefault();
    var data = $(this).serialize();
    var action = $(this).attr("action");
    $.ajax({
        url : action,
        type: "POST",
        data : data,
        success: function(res) {
        },
        error: function (req, text, error) { 
           alert('Ошибочка! ' + text + ' : ' + error);
        },
    });
});

В БД все сохраняется идеально, но валидация формы не проходит. Если отправлять пустые данные, в консоли выводит ошибку, типо нельзя сохранять пустые данные в бд, ну он должен же сначала проверять на стороне клиента что форма пустая и нужно заполнить. Не работает в общем. Буду благодарна любой помощи.

Answer 1

Мда, я просто случайно подключила два файла jQuery, не думая о том, что в Yii2 он уже есть, и в итоге валидация никак не могла сработать.

Answer 2

Если вы хотите проверять на стороне клиента, то сделайте проверку перед ajax запросом на jQuery или javascript

('#create_application').on('submit', function(event){   
event.preventDefault(); 
var data = $(this).serialize(); 
var action = $(this).attr("action"); 
 
if ($('input[name=name]')){ 
alert('field name with error') 
}  
else{ 
 
$.ajax({ 
... 
)}; 
 
} 
 
)};

если проверять на js не хотите то укажите в модели что если поле заполнено то ответ 1 иначе ошибка. Это для общего , что бы каждое поле не прописовать

READ ALSO
Реализация поиска пользователей

Реализация поиска пользователей

Есть API которое выдает список пользователей с N количеством параметров у пользователя(имя, телефон

112
Что делать с текстами, в которых присутвуют пустые строки?

Что делать с текстами, в которых присутвуют пустые строки?

Всем привет! Заголовок запроса может быть не понятен, но я сейчас попробую объяснитьНа сервере есть тексты, как эти:

129
Как правильно настроить elasticsearch под неточный поиск?

Как правильно настроить elasticsearch под неточный поиск?

Есть названия товаров к примеру

105
Как добавить теr к товарам через wp функцию?

Как добавить теr к товарам через wp функцию?

как можно добавить ко всем товарам сразу тег, я пробовал вот так присваивать, но не вышло

133