Я вот таким образом всегда делаю.
Создаю в компонентах ядра trait(его я использую везде где есть ajax валидация)
trait AjaxValidationTrait
{
/**
* Performs ajax validation.
*
* @param Model $model
*
* @throws \yii\base\ExitException
*/
protected function performAjaxValidation(Model $model)
{
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
echo json_encode(ActiveForm::validate($model));
Yii::$app->end();
}
}
}
Затем в нужном контроллере подключаю данный trait и в нужном action загружаю в него модель.
class DefaultController extends BaseAdminController
{
use AjaxValidationTrait;
public function actionCreate()
{
$model = new Point();
$this->performAjaxValidation($model);
if ($model->validate()) {
....
} else {
return $this->render('create', [
'model' => $model]
);
}
}
}
Затем в самой форме отключаю клиентскую валидацию и подключаю ajax валидацию
<?php $form = ActiveForm::begin([
'enableAjaxValidation' => true,
'enableClientValidation' => false,
]); ?>