2010-11-26 20 views
7

私はCodeigniterをかなり使い慣れていますが、私はCodeigniterのベストプラクティスに疑問を抱いています。私は

$this->load->view 

を使用して対redirect()を使用する必要があるとき私はそれが必要のようなredirect()その後、$this->session->set_flashdata作品を使用しますが、ときに私は

$this->load->view 

を使用すると、メッセージが追加の要求後に表示されているようです。

+1

'flashdata'は現在の'の$ this - >ロード - >ビュー()上では動作しません; '、 (現在のブラウザではなく)ブラウザによる次のページの読み込みでのみ見られるセッション値を設定するためです。データを 'view()'に渡したいのであれば、それを 'view($ page、$ data)'呼び出し自体に第2引数として渡してください。 –

+0

あなたは何をしようとしているのか分かりません。おそらくもう少し時間をかけてCIドキュメントを読む必要があります。ちょっと混じっているような音がします.... – Ben

+0

http://stackoverflow.com/a/32866456/412591 –

答えて

6

本当にあなた自身の質問に答えたと思います。

別のページの上部にある簡単なフラッシュメッセージが適切な応答である場合は、redirect()を使用してください。受信したものが何であれ、ページ全体をフィードバックするときは$ this-> load-> view()リクエストは可能性があります。

たとえば、新しいユーザーがサインアップすると、「成功」ページが読み込まれたビューになります。ユーザーが自分のアカウントで何かを編集すると、「変更が保存されました」というようなメッセージや、 。

+0

私はこれに苦しんでいますが、 '$ this-> load-> view()'は、フラッシュメッセージの使い方などの機能が不足しているように見えますが、冗長であるようです。確かに 'redirect()'を使っていつも離れていくことができますか? – wired00

4

リダイレクトは、他の二つの一般的な問題のためにも有用です:

  • あなたのアプリ内のリソースが移動され(そして、あなたは、クライアントが新しいURIを覚えておきたい)内の1つのステップとして、フォームを投稿した後
  • を戻るボタンrePOSTを防止する
1

かなり簡単です。あなたはどんなURLをユーザーにしたいのですか?それらがurl1にあり、url1にデータをポストして別のビューを読み込むだけであれば、それらは引き続きurl1になります。 url2にリダイレクトすると、url2に移動します。

4

flashdataを作成するたびに、利用可能なのは正しいことです。 flashdataは、次のリクエストで利用できる特別なタイプのsessionにすぎず、次のリクエスト後に自動的に削除されるためです。あなたはその削除の世話をする必要はありません。

これは、コードを使用してテストすることができます。

$this->session->set_flashdata('test', 'testing'); 
echo $this->session->flashdata('test'); 

何も印刷されません。しかし次回は次のコードを実行します:

echo $this->session->flashdata('test'); 

必要な出力があります。もう一度やり直すと出力が得られません。これが彼らの働きです。詳細については、あなたがflashdataだけのビューにデータを渡す必要はありません、現在のページの

http://codeigniter.com/user_guide/libraries/sessions.htmlにFlashdataセクション をご確認ください。ここでは、コードは次のようになります。

$data['test'] = 'testing'; 
$this->load->view('sample_view', $data); 

ボトムラインはredirect()でその使用flashdataで、ビューのために、あなたは変数を渡す必要があります。お役に立てれば!

1

PRG - Post/Redirect/Getパターンを使用する必要があります。 ページのコンテンツにフォームがある場合、リダイレクトとロードビューは同じではありません。

アカウントからお金を引き落とすためのビュー、view_1形式があります。 view_1にフォームを提出すると、成功メッセージでview_2にジャンプし、同じ目的を達成するための2つのオプションがあります。 1.成功したメッセージでview_2をロードするか、2.成功したメッセージを運ぶフラッシュデータでview_2にリダイレクトします。

オプション1:成功のメッセージ と負荷view_2フォームを送信するとリフレッシュ、それは再提出を引き起こし、場合であってはならないアカウントから複数の引き落としが発生します。また、「フォームの再送信の確認」の警告が表示されます。

オプション2:これは PRG

PRG正しい答えである - ポスト/リダイレクト/取得 PRGは、フォームを送信し、意味一部重複フォームの送信を防ぐWeb開発デザインパターンである(view_1) - >リダイレクト - >(view_2)

Under the hood 

リダイレクトステータスコード取得 - HTTPとHTTP 1.0 HTTP 302またはHTTP 1.1を303

ステータスコードがリダイレクトされたHTTP応答は、ロケーションヘッダーフィールドにURLを追加します。ユーザエージェント(例えば、ウェブブラウザ)は、このコードでの応答によって招待され、位置フィールドに指定された新しいURLに対する第2の、他の点で同一の要求を行う。

リダイレクトステータスコードは、この状況では、Webユーザーのブラウザが最初のHTTP POST要求を再送信しなくてもサーバーレスポンスを安全に更新できることを保証することです。もちろん

Source

Double Submit Problem 

Double Submit Problem

Post/Redirect/Get Solution 

Post/Redirect/Get Solution

関連する問題