Нужно реализовать сохранение данных без перезагрузки страницы, соответсвенно ошибки тоже нужно выводить без перезагрузки. Реализовал следующую валидацию:
<?php $form = ActiveForm::begin([
'id' => 'create-order-form',
'enableAjaxValidation' => true,
'validateOnSubmit' => true,
'validateOnType' => false,
'validateOnChange' => false,
'validationUrl' => Url::toRoute(['/order/validate-form']),
'options' => [
'class' => 'order-form',
],
'fieldConfig' => [
'options' =>
[
'tag' => false,
]
],
])?>
<div class="row">
//Тут хочу вывести ошибки
<?php Pjax::begin(['id' => 'form-errors']);?>
<?php if($model->hasErrors()):?>
<?php foreach ($model->getErrors() as $key => $value):?>
<div class="alert alert-danger w-100 text-center" role="alert">
<?= $value[0];?>
</div>
<?php endforeach;?>
<?php endif;?>
<?php Pjax::end();?>
</div>
//Поля формы
Метод валидации:
public function actionValidateForm()
{
if(Yii::$app->request->isAjax)
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$model = new CreateOrder();
if($model->load(Yii::$app->request->post()))
{
return ActiveForm::validate($model);
}
}
throw new \yii\web\BadRequestHttpException('Bad request!');
}
Js код который должен обновить Pjax
$('#create-order-form').on('afterValidate',function(){
$.pjax.defaults.timeout = 3000;
$.pjax.reload({container: '#form-errors'});
});
В консоли ошибки приходят, но почему то в блоке где я хочу вывести ошибки они не появляются. Дело в том что стандартный вывод ошибок мне не подходит по этому в 'template' я убрал поля ошибок и хочу вывести отдельно.
Думаю ошибка в том что я не правильно вывожу их. В документации и на форумах показано как сделать ajax валидацию но я нигде не нашел как получить ошибки отдельно от метода ActiveForm field.