基本上在codeigniter中,我如何在其他库中使用系统和应用程序库?所以说我有一个应用程序库,如:
class User
{
// some instance variables
}
现在假设我想在User类中使用codeigniter会话类,基本上可以使用User类中的会话。我怎么能这样做呢?
答案 0 :(得分:2)
执行此操作的典型方法是使用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的状态和不同的加载类产生很多依赖,而不是通过依赖注入将它们的实例直接传递给User类,但这是开发CI库的人的典型流程。
答案 1 :(得分:0)
理想情况下,您只需从模型或控制器中传入所需的会话数据,即可加载库。
否则,这应该适用于任何文件:
<?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');
?>
我在类似question上找到了这个答案。