在codeigniter中,我如何在库中使用系统和应用程序库?

时间:2012-10-15 19:39:33

标签: php codeigniter session libraries

基本上在codeigniter中,我如何在其他库中使用系统和应用程序库?所以说我有一个应用程序库,如:

class User
{
   // some instance variables
}

现在假设我想在User类中使用codeigniter会话类,基本上可以使用User类中的会话。我怎么能这样做呢?

2 个答案:

答案 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上找到了这个答案。