@dikium

Что должен возвращать validate ajax-запрос в ActiveForm Yii2?

Здравствуйте! Я столкнулся со следующей проблемой в Yii2:
Я хочу проверять данные ActiveForm формы с помощью ajax. Для этого я объявил форму следующим образом:
<?php
if($new_technic)
	$action = Url::to(['admin/create-technic']);
else
	$action = Url::to(['admin/update-technic', "id" => $_GET['id']]);

$form = ActiveForm::begin([
	'id' => 'technic-form',
	'action' => $action,
	'enableClientValidation' => false,
	'enableAjaxValidation' => true,
	'validationUrl' => Url::to(['admin/validate-technic']),
	'validateOnSubmit' => true,
]);
?>
<?= $form->field($technic, 'model')->dropDownList($tech_models, ['id' => "tech_model"]); ?>

<div id="model_input" style="display: none; padding-left: 48px;">
	<?= $form->field($tech_model, 'firm')->textInput(); ?>
	<?= $form->field($tech_model, 'model')->textInput(); ?>
	<?= $form->field($tech_model, 'type')->dropDownList($tech_types); ?>
</div>

<?= $form->field($technic, 'logic_id')->dropDownList($logics); ?>

<?= $form->field($technic, 'physic_id')->dropDownList($physics); ?>

<div class="form-group">
	<?php
	if($new_technic)
		$label = 'Добавить';
	else
		$label = 'Изменить';

	 echo Html::submitButton($label, ['class' => 'btn btn-primary', 'name' => 'contact-button']);
	?>
</div>

<?php
ActiveForm::end();

В этом случае, при валидации, форма посылает запрос на admin/validate-technic и в случае успеха переходит на admin/create-technic.
Вопрос в следующем: что должен возвращать admin/validate-technic в случае неудачной проверки? В официальных доках содержится такая конструкция:
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
    Yii::$app->response->format = Response::FORMAT_JSON;
    return ActiveForm::validate($model);
}

Т.е. возвращается ассоциативный массив, в котором именами ключей служат названия полей, а значениями - сообщения об ошибках. Тогда я пытаюсь сделать так:
public function actionValidateTechnic()
{
   if(Yii::$app->request->isAjax)
   {
	Yii::$app->response->format = Response::FORMAT_JSON;

	$tech = new Technic();
	$tech->load($_POST);
	return ActiveForm::validate($tech);
   }
}

И это действие всегда проводит успешную валидацию, даже если ActiveForm::validate не проводится как надо и возвращает ошибки. При этом если сделать вот так:
public function actionValidateTechnic()
{
    return false;
}

То валидация не проводится и форма не отправляется. Но стоит вернуть ActiveForm::validate($tech); как валидация проводится даже если форма заполнена неверно. Т.е. ajax-запрос возвращает сообщение об ошибке, но форма все равно перескакивает на её action.
Вопрос вот в чем: что должен вернуть ajax-запрос, чтобы форма не подтвердилась и высветились нужные сообщения об ошибках? И что он должен вернуть при успешной валидации?
  • Вопрос задан
  • 1267 просмотров
Решения вопроса 1
@dikium Автор вопроса
Ох, перезагрузил компьютер, запустил сервер и внезапно всё заработало! В чем была проблема не пойму... Всем спасибо!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы