私が思いついた1つの解決策は、セッションを使用することです。これは使いやすく、ベンチマークを行う必要がある「高速」です。
上記/以下の両方の回答についてコメントしたように、リクエストごとにすべてが「リセット」されるという理由だけで、異なるコントローラーで同じデータを取得する方法はありません。別のコントローラーにアクセスするには、少なくともそのページをリロードする必要があります。(注、AJAX 呼び出しでも新しい要求が作成されます)
セッションはサイズによって制限されていることに注意してください.4kbの制限があります(CodeIgniterはセッションをCookieとして保存します)が、待ってください.DBに保存する方法があります(これを許可するには、構成ファイルに移動して有効にし、$config['sess_use_database'] = TRUE;
テーブルを作成します詳細はこちら)
答え自体に行きましょう。すべてのコントローラーを拡張しようとしていない場合はそれを行い、次のようにそのcore/MY_Controller.phpファイルにコードを配置しようとしたことを理解しています。
private function _initJSONSession() { //this function should be run in MY_Controller construct() after succesful login, $this->_initJSONSession(); //ignore return values
$json_session_data = $this->session->userdata('json');
if (empty($json_session_data )) {
$json_session_data['json'] = array(); //your default array if no session json exists,
//you can also have an array inside if you like
$this->session->set_userdata($ses_data);
return TRUE; //returns TRUE so you know session is created
}
return FALSE; //returns FALSE so you know session is already created
}
これらのいくつかの関数も必要です。それらは自明であり、すべて公開されているため、MY_Controller.php によって拡張された任意のコントローラーで自由に使用できます。
$this->_existsSession('json');
public function _existsSession( $session_name ) {
$ses_data = $this->session->userdata( $session_name );
if (empty( $ses_data )) return FALSE;
return TRUE;
}
public function _clearSession($session_name) {
$this->session->unset_userdata($session_name);
}
public function _loadSession($session_name) {
return (($this->_existsSession( $session_name )) ? $this->session->userdata($session_name) : FALSE );
}
最も興味深い機能は_loadSession()
、セッション自体を完全に理解するのに時間がかかりました。簡単に言えば、既にセッションにあるデータを取得 (ロード) する必要があります。新しいデータを追加するか、一部を削除してから、同じセッション内のすべてのデータを元に戻します ( REWRITE )。
例に行きましょう:
セッションは2次元配列のようなものであることに注意してください(私は4 + 5次元配列を自分で扱っています)
$session['session_name'] = 'value';
$session['json'] = array('id' => '1', 'name' => 'asok', 'some_array' => array('array_in_array' => array()), 'etcetera' => '...');
使用するセッションで新しい (書き換える) ものを書き込む
{
$session_name = 'json';
$session_data[$session_name] = $this->_loadSession($session_name);
//manipulate with array as you wish here, keep in mind that your variable is
$session_data[$session_name]['id'] = '2'; // also keep in mind all session variables are (string) type even (boolean) TRUE translates to '1'
//or create new index
$session_data[$session_name]['new_index'] = FALSE; // this retypes to (string) '0'
//now put session in place
$this->session->set_userdata($session_data);
}
独自の関数を使用しadd_data()
たい場合は、これを行う必要があります
- 最初にいくつかのデータを渡す必要があります
add_data($arr = array(), $data = ''){}
例えば:array_unshift( $arr, $data );
{
//your default array that is set to _initJSONSession() is just pure empty array();
$session_name = 'json';
$session_data[$session_name] = $this->_loadSession( $session_name );
// to demonstrate I use native PHP function instead of yours add_data()
array_unshift( $session_data[$session_name], 'sample-data' );
$this->session->set_userdata( $session_data );
unset( $session_data );
}
それだ。