3

ZF2 を使い始めたとき、最初に使用したモジュールは ZfcUser でした。コントローラーのコードをデバッグすると、(少なくとも私にとっては) アクションを管理する奇妙な方法が見つかりました。次のようなコードを見つけました

    $prg = $this->prg('zfcuser/changepassword');

    if ($prg instanceof Response) {
        return $prg;
    } elseif ($prg === false) {
        return array(
            'status' => $status,
            'changePasswordForm' => $form,
        );
    }

    //VALIDATE FORM AND DATABASE STUFF
    (...)

動作は次のとおりです。

  1. 最初の load $prg は false であるため、フォームを返します。
  2. ページを送信すると、$prg は Response のインスタンスなので、$prg を返します。
  3. $prg が返されると、同じ関数が再度呼び出され、$prg は投稿されたすべてのデータを含む配列になるため、フォームとデータベースの検証にジャンプします。

私はそれが奇妙なアプローチだと思ったので、これを単純な request->isPost() に置き換えて必要なすべての関数をオーバーライドします。投稿された最初のロード/データを処理する方が簡単であることがわかりました。

私は今までそれをもっと重要視していませんでした。ファイルをアップロードしようとしているときに、Post-Redirect-Get アプローチに再び直面しています。フォームで検証エラーが発生したときに、ユーザーがファイルを再選択して再アップロードできないようにする必要があるようです。

Post-Redirect-Get のポイントは何ですか? (コメント付きのファイルのアップロードとは別に)いつ使用することをお勧めしますか?

4

1 に答える 1

1

ドキュメントに記載されているように:

ユーザーが POST リクエストを送信すると (たとえば、フォームを送信した後)、ブラウザは POST の再送信、戻るボタンの破損、ブラウザの警告とポップアップの発生、フォームの再送信からユーザーを保護しようとします。代わりに、POST を受信するときに、データをセッション コンテナーに保存し、ユーザーを GET 要求にリダイレクトする必要があります。

したがって、このプラグインの目的は、ユーザー エクスペリエンスを向上させることです。フォームを送信してページを更新しようとすると、この問題に遭遇したに違いありません。次のようなポップアップ メッセージが表示されます (Google Chrome の例)。

Confirm Form Resubmission: 入力した情報を探しているページです。そのページに戻ると、実行したアクションが繰り返される可能性があります。続けたいですか?

フォームがファイルのアップロードを処理する場合は、Post/Redirect/Get PluginまたはFile Post/Redirect/Get Pluginのドキュメントで詳細を取得できます。

注: File Post/Redirect/Get プラグイン - 使用例の 16 行目にタイプミスがあり$this->filePrg()ます$this->prg()。下の行のようになるはずです。

$prg = $this->filePrg($myForm, '/user/profile-pic', true);
于 2013-04-07T21:51:39.890 に答える