Много чего перерыл, но из найденных примеров у меня не работает. Валидация срабатывает, ошибки показывает, но данные из формы не приходят и не сохраняются.
Цель - когда пользователь заполняет форму, если все нормально, появляется кнопка загрузки документа, получает вордовский документ. Жать кнопку отправки формы не нужно
Форма
Код: Выделить всё
<?php $form = ActiveForm::begin([
'enableClientValidation' => true,
'enableAjaxValidation' => true,
'action' => Url::toRoute('/perevod-default/update?id='.$model->id),
'validationUrl' => Url::toRoute('/perevod-default/ajax'),
'options' => ['class' => 'perevod-default-form','id' => $model->formName() ]
]); ?>
Код: Выделить всё
public function actionUpdate($id)
{
$model = $this->findModel($id);
$session = Yii::$app->session;
$session->open();
$session['id'] = $model->id;
$session->close();
if (\Yii::$app->request->isAjax && $model->load(Yii::$app->request->post()) && $model->validate() && $model->save()) {
Yii::$app->response->format = Response::FORMAT_JSON;
return $this->renderAjax('update', [
'model' => $model,
]);
}
return $this->render('update', [
'model' => $model,
]);
}
Код: Выделить всё
public function actionAjax() {
$model = new PerevodDefault();
if (Yii::$app->request->isAjax ) {
Yii::$app->response->format = Response::FORMAT_JSON;
if ($model->load(Yii::$app->request->post())) {
return ActiveForm::validate($model);
}
}
throw new \yii\web\BadRequestHttpException('Bad request!');
}
Код: Выделить всё
$js ="
$(document).ready(function () {
$('#{$model->formName()}').on('beforeSubmit', function (event) {
event.preventDefault();
var form_data = new FormData($('#{$model->formName()}'));
$.ajax({
url: $('#{$model->formName()}').attr('action'),
dataType: 'JSON',
cache: false,
contentType: false,
processData: false,
data: form_data.serialize(),
type: 'post',
beforeSend: function() {
},
success: function(response){
toastr.success(' ',response.message);
},
complete: function() {
},
error: function (data) {
toastr.warning(' ','There may a error on uploading. Try again later');
}
});
return false;
});
});
";
$this->registerJs($js);