web-dev-qa-db-ja.com

CodeIgniterでリダイレクトとともにデータを送信する

(CRUDの)単純なC関数があり、作成した「挿入」関数からのリダイレクトとともにメッセージ(エラーまたは成功)を送信したいと思います。 POSTフィールドにリダイレクトを付ける方法はありますか?

私が持っている擬似コード:

function view_all{
    //set up some initial variables
    $this->load->view(viewing_page, $data)
}

function insert{
    if ($this->db->insert(my_table, $_POST)){
        $message = "All's well";
    }
    else {
        $message = "whoops!";
    }
    redirect(view_all);
}

したがって、viewing_pageには理想的には次のようなものがあります。

if (isset($message)){
    echo $message
}

そのため、初めてメッセージを表示することはありません。挿入がある場合は、メッセージがある同じページがポップアップ表示されます。ありがとう!

27
Alex Mcp

redirectheader()を使用すると信じています。もしそうなら、ロケーションヘッダーと共にデ​​ータを送信できるとは思わない。セッション変数を使用するか、(それほど良くない)ロケーションURLにクエリ文字列を追加することで、同じことを実現できます。

CodeIgniterでこれを行う「受け入れられた」方法については、 セッションクラス ドキュメントページの半分より下を見てください。

CodeIgniterは、「flashdata」、または次のサーバーリクエストでのみ使用可能なセッションデータをサポートし、自動的にクリアされます。これらは非常に便利な場合があり、通常は情報メッセージまたはステータスメッセージに使用されます(たとえば、「record 2 deleted」)。

これ(現在は削除されています-ここに アーカイブバージョンフラッシュメッセージに投稿 はクエリ文字列とセッション変数メソッドの両方をカバーしています。

Update:現在削除された投稿を要約するために、メッセージのurlencodingとクエリ文字列としての追加の両方を示しました(投稿からの例):

header('Location: http://www.example.com/index.php?message='.urlencode($message));

そして、2つのフレームワークを使用して「フラッシュ」変数を設定します(投稿の例):

//Zend Framework
$flashMessenger = $this->_helper->FlashMessenger;
$flashMessenger->setNamespace('actionErrors');
$flashMessenger->addMessage($message);

//CakePHP
$this->Session->setFlash('Your post has been saved.');
$this->redirect('/news/index');

もちろん、$_SESSIONを直接使用してほぼ同じことを行うことができます(私の例):

//first request
$_SESSION['flash'] = 'This is a simple flash message.';
//next request
$flash = $_SESSION['flash'];
unset($_SESSION['flash']); //flash is one time only
33
Tim Lytle

CIでFlashdataを使用できます セッションクラス 。これは文書で述べられていることです:

CodeIgniterは、「flashdata」、または次のサーバーリクエストでのみ使用可能なセッションデータをサポートし、自動的にクリアされます。これらは非常に便利な場合があり、通常は情報メッセージまたはステータスメッセージに使用されます(たとえば、「record 2 deleted」)。

注:Flash変数の先頭には「flash_」が付いているため、独自のセッション名ではこのプレフィックスを避けてください。

Flashdataを追加するには:

_$this->session->set_flashdata('item', 'value');
_

set_flashdata()と同じ方法で、配列をset_userdata()に渡すこともできます。

Flashdata変数を読み取るには:

_$this->session->flashdata('item');
_

追加のリクエストでflashdata変数を保存する必要がある場合は、keep_flashdata()関数を使用して保存できます。

_$this->session->keep_flashdata('item');
_
27
Shaolin

CodeIgniterはログアウト時に現在のセッションを破棄することを指摘したいと思います。これにより、フラッシュまたはセッションストレージを使用できないため、「ログイン/ログアウトしました」の行に沿ってメッセージを渡すことがより困難になります。ログイン状態とログアウト状態を切り替えるときにメッセージを渡す必要がある場合は、 memcached を使用することをお勧めします。他のオプション(上記)は、 RLクエリ文字列を使用 および Cookieの設定 です。

0
Tom Lagier