基本的に codeigniter では、システム ライブラリとアプリケーション ライブラリを他のライブラリ内で使用するにはどうすればよいですか? たとえば、次のようなアプリケーション ライブラリがあるとします。
class User
{
// some instance variables
}
ここで、User クラスで codeigniter セッション クラスを使用して、基本的に User クラス内でセッションを操作できるとします。どうすればこれを行うことができますか?
基本的に codeigniter では、システム ライブラリとアプリケーション ライブラリを他のライブラリ内で使用するにはどうすればよいですか? たとえば、次のようなアプリケーション ライブラリがあるとします。
class User
{
// some instance variables
}
ここで、User クラスで codeigniter セッション クラスを使用して、基本的に User クラス内でセッションを操作できるとします。どうすればこれを行うことができますか?
これを行う一般的な方法はget_instance()
、Codeigniter (実際には現在のコントローラー クラス) のインスタンスを返す を使用することです。
これは、CI アプリケーションのどこからでも機能します。
get_instance()->session->set_userdata('key', 'value');
$segments = get_instance()->uri->segment_array();
// etc.
通常、Codeigniter では、使いやすいようにクラス変数に割り当てます。
class User
{
private $CI;
function __construct()
{
$this->CI = get_instance();
}
// Example
function login()
{
$user = $this->get_user();
$this->CI->session_set_userdata('user_id', $user->id);
}
}
これにより、依存性注入を介してユーザー クラスに直接インスタンスを渡すのではなく、CI の状態とさまざまな読み込まれたクラスに多くの依存関係が作成されますが、これは CI ライブラリを開発する人にとって典型的なフローです。
理想的には、ライブラリをロードするモデルまたはコントローラーから必要なセッション データを渡すだけです。
それ以外の場合、これはどのファイルからでも機能するはずです。
<?php
ob_start();
include('index.php');
ob_end_clean();
$CI =& get_instance();
$CI->load->library('session'); //if it's not autoloaded in your CI setup
echo $CI->session->userdata('name');
?>
同様の質問でこの回答を見つけました。