著者: Bailang 出典: http://www.manks.top/yii2_modal_activeform_ajax.html この記事の著作権は著者に帰属しており、転載することは歓迎されていますが、この記述は著者の同意なしに保持する必要があります。元のテキストへのリンクは、記事ページのわかりやすい位置に提供する必要があります。そうでない場合、当社は法的責任を追及する権利を留保します。
以前、yii2 でモーダルを使用する方法と、yii2 グリッドビュー リストの更新操作でモーダルを使用する方法について説明しましたが、モーダルは終わりを迎え、新しいトピックを開始できると思いましたが、実際の問題はそれを超えていることがよくあります。これはモーダルポップアップウィンドウではありません。送信されたフォームを確認する方法の問題がまた出てきました。
この問題の本質はモーダルとはほとんど関係がありません。問題の核心は ActiveForm の非同期検証にあり、これによって主な矛盾が解決され、記事の問題が解決されます。ちなみにモーダルに関しては特に何も言うことはありません。必要に応じて後で元に戻します。
yii2 では、ActiveForm はデフォルトでクライアント側の検証を行いますが、フォームの送信は更新不要ではありません。つまり、フォームが送信された後にページが更新されることがよくあります。リフレッシュフリー モードを有効にしたい場合は、以下に示すように、ActiveForm で EnableAjaxValidation を有効にするだけです
<?php $form = ActiveForm::begin([ 'id' => 'form-id', 'enableAjaxValidation' => true, 'validationUrl' => Url::toRoute(['validate-form']), ] ); ?>
ID も EnableAjaxValidation も省略できないことに注意してください。
validateUrlについて説明しましょう。このパラメータを設定しない場合、アドレスはデフォルトで現在のルートになり、フォームの入力がフォーカスを失ったときに、データへの変更が反映されることに興味があるでしょう。バックエンドで処理されましたか?多くの場合、これは私たちが望んでいることではありません。要求された操作の意味は、非同期検証を実行することです。具体的な実装を見てみましょう:
//表单提交操作,基本上不需要做改动 if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['index']); } } return $this->render('create', [ 'model' => $model, ]); // @see http://www.manks.top/yii2_modal_activeform_ajax.html // 看主要的验证操作,该操作是表单字段失去焦点时异步验证,同时如果直接提交表单,也会先执行该操作进行验证 public function actionValidateForm () { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; $model = new Model(); $model->load(Yii::$app->request->post()); return \yii\widgets\ActiveForm::validate($model); }
このようにして、yii2 の非同期非リフレッシュフォーム検証が簡単に実装されます。
今回のテーマは短いですが素晴らしい内容ですので、お役に立てれば幸いです。
[現在、ほとんどの国内ウェブサイトが非常に頻繁に記事を収集しており、元の記事の出典を示していないサイトさえあることを考慮すると、原著者は読者が問題を防ぐために元の記事を確認し、誤解を招くことを避けるためにすべての記事を更新しないことを望んでいます。 ! ]
元のテキストを表示
上記は、yii2 モーダル ポップアップ ウィンドウの ActiveForm ajax フォームの非同期検証を紹介しました。関連する内容も含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。