Почему сохраняет неверные данные даже при ajaxValidationUrl?
У меня есть поле, которое валидируется через enableAjaxValidation. У формы стоит validationUrl, который возвращает ошибки. Всё работает. Однако, если проигнорировать все эти сообщения и нажать кнопку "submit", то данные все сохранятся, т.к. валидации в экшне сохранения уже нет. Как быть?
Мне нужно, чтобы даже при клике на submit провалидировались данные и только потом произошла отправка формы на сохранение
Экшн
public function actionUpdate(int $id) {
$componentModel = Component::findOne(['id' => $id]);
if ($componentModel->load(Yii::$app->request->post()) && $componentModel->save(false)) {
return $this->redirect(['view', 'id' => $componentModel->id], 200);
}
$renderData = [
'model' => $componentModel,
];
return Yii::$app->request->isAjax ? $this->renderAjax('update', $renderData) : $this->render('update', $renderData);
}
валидация
public function actionValidate(int $id) {
$componentModel = Component::findOne(['id' => $id]);
$componentModel->attributes = Yii::$app->request->post()['Component'];
Yii::$app->response->format = Response::FORMAT_JSON;
if (!$componentModel->validate())
return ActiveForm::validate($componentModel);
return [];
}
форма
<?php $form = ActiveForm::begin([
'id' => 'component-form',
'action' => Url::to(['/physical-node/update', 'id' => $componentModel->id]),
'options' => [
'data-pjax' => 1
],
'validationUrl' => Url::to(['/physical-node/validate', 'id' => $componentModel->id]),
]); ?>
// ...
// ...
// ...
// ...
Ответы (1 шт):
Автор решения: UKRman
→ Ссылка
При субмите в екшене тоже делайте валидацию, почему вы ее отключили, можете добавить к форме атрибут validateOnSubmit в true. Но ваш екшен при субмите изменить нужно:
public function actionUpdate(int $id) {
$componentModel = Component::findOne($id);
if ($componentModel->load(Yii::$app->request->post()) && $componentModel->validate()) { // или $componentModel->save()
$componentModel->save(false);
return $this->redirect(['view', 'id' => $componentModel->id], 200);
}
$renderData = [
'model' => $componentModel,
];
return Yii::$app->request->isAjax ? $this->renderAjax('update', $renderData) : $this->render('update', $renderData);
}