6

コントローラに次のコードを追加して、ショッピング カートが空かどうかを確認します。

if (!$this->cart->contents()){
    $this->session->set_flashdata('message', 'Your cart is empty!');
}

$this->data['message'] = $this->session->flashdata('message');

$this->load->view('templates/header', $this->data);
$this->load->view('bookings', $this->data);
$this->load->view('templates/footer');

「予約」ビューで、次のコードを設定してメッセージを表示します。

<div id="infoMessage"><?php echo $message;?></div>

しかし、最初のページで「カートは空です!」というメッセージを読み込みます。表示されていません。ただし、F5 キーを押すか、ブラウザを更新すると表示されます。

「CodeIgniter は "flashdata"、または次のサーバー要求でのみ利用可能で、その後自動的にクリアされるセッション データをサポートする」という codeigniter のマニュアルを既に読みました。

ただし、このメッセージをどこに設定すればよいかわからないため、「次のサーバー要求」で利用できるようになります。

4

1 に答える 1

19

データをビューに渡してフラッシュデータとして割り当てる必要はありません。

初めて機能しない理由は、flashdata が次のサーバー要求でしか利用できないためです。ビューの読み込みはサーバー リクエストではありません。ただし、ページの更新は。

これにはいくつかの解決策があります。

  • データを直接渡し、ビューをロードします。(フラッシュデータは使用しません。)
  • flashdata を使用してページにリダイレクトします。

データを直接渡す

直接渡すこともできます(個人的にはこのオプションを使用します-この場合になぜflashdataを使用する必要があるのか​​ わかりません。カートは空です...):

コントローラ:

if (!$this->cart->contents())
{
    $this->data['message'] = 'Your cart is empty!';
}

$this->load->view('templates/header', $this->data);
$this->load->view('bookings', $this->data);
$this->load->view('templates/footer');

意見:

<div id="infoMessage"><?php echo $message;?></div>

フラッシュデータの使用

または、flashdata を使用する場合は、次のようにします。

コントローラ:

if (!$this->cart->contents())
{
    $this->session->set_flashdata('message', 'Your cart is empty!');
}

redirect('/your_page');

意見:

 <div id="infoMessage"><?php echo $this->session->flashdata('message');?></div>

この方法を使用する場合は、単にビューをロードするだけでは不十分です。上で説明したサーバー要求の問題によりredirect('/your_page');、 とURL Helper $this->load->helper('url');を使用してユーザーをリダイレクトする必要があります。headerネイティブの PHP関数を使用して、適切な HTTP ヘッダーを送信することもできます。初めてビューをロードしても機能しません。


これを使用し$this->session->keep_flashdata('message');て、追加のリクエスト用にデータを保存できます。

また、セッションライブラリを自動ロードするか、コントローラーのコンストラクターにロードするかを確認し$this->load->library('session');ます(そうなると確信していますが、とにかく確認する価値があります。)

最後に、セッション データをデータベースに保存している一部の人々は、flashdata に問題がある可能性があることを知っています。

ちなみに、個人的には、エコーする前に変数が設定されていることを確認するチェックが必要です。

于 2012-08-24T07:39:27.083 に答える