先ほど、yii2 でモーダルを使用する方法と、yii2 グリッドビュー リストの更新操作でモーダルを使用する方法について説明しましたが、モーダルは終了し、新しいトピックを開始できると思いましたが、実際には問題が発生することがよくあります。想像を超えています。モーダルの場合はそうではありません。ウィンドウから送信されたフォームをどのように確認するかという問題が再び発生しました。
まず、モーダルはさておき、yii2 ActiveForm が Ajax でフォームを送信する方法について簡単に説明します。これが今日のトピックの焦点でもあります。モーダルについては特に言うことはありません。必要に応じて後で元に戻します。
yii2 では、ActiveForm はデフォルトでクライアント側の検証を行いますが、フォームの送信は更新不要ではありません。つまり、フォームが送信された後にページが更新されることがよくあります。リフレッシュフリーモードを有効にしたい場合は、以下のように ActiveForm でenableAjaxValidationを有効にするだけです
<?php $form = ActiveForm::begin([ 'id' => 'form-id', 'enableAjaxValidation' => true, ] ); ?>
id もenableAjaxValidation も省略できないことに注意してください。
サーバーの実装を見てみましょう
if ($model->load(Yii::$app->request->post())) { Yii::$app->response->format = yii\web\Response::FORMAT_JSON; if ($errors = \yii\widgets\ActiveForm::validate($model)) { return $errors; } else { if($model->save(false)) { return $this->redirect(['index']); } } } return $this->render('create', [ 'model' => $model, ]);
このようにして、yii2 の非同期非更新フォーム送信を簡単に実装できます。
実際のところ、私が言うかどうかは関係ありません。これは主に一部の怠け者が参考にするために書いたものです。賢い人はタイトルを読めば、ActiveForm を介してモーダル送信フォームの問題を解決する方法を理解できるでしょう。
モーダルと互換性を持たせるために、実装ではなく互換性について話していることに注意してください。参考のためにプログラムにわずかな変更を加えています。
if ($model->load(Yii::$app->request->post())) { if ($model->save()) { if (Yii::$app->request->isAjax) { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return ['success' => true]; } return $this->redirect(['index']); } else { if (Yii::$app->request->isAjax) { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return \yii\widgets\ActiveForm::validate($model); } } } if (Yii::$app->request->isAjax) { return $this->renderAjax('create', [ 'model' => $model, ]); } else { return $this->render('create', [ 'model' => $model, ]); }
上記は、エディターが紹介した yii2 モーダル ポップアップ ウィンドウの ActiveForm ajax フォーム検証に関する知識です。さらに詳しく知りたい場合は、Script House の Web サイトに注目してください。