2012-10-15 56 views
0

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

class User 
{ 
    // some instance variables 
} 

现在可以说,我想用笨会话类的用户类,基本上能够与用户类中的会话。我怎么能这样做呢?

回答

2

这样做的典型方法是使用get_instance(),它返回Codeigniter的实例(实际上是当前控制器类)。

这将在任何地方工作在您的CI应用:

get_instance()->session->set_userdata('key', 'value'); 
$segments = get_instance()->uri->segment_array(); 
// etc. 

通常在笨,你把它分配给类变量的易用性:

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库的典型流程。

+0

不要忘记通过引用来指定:'= &' ;) –

+0

@JordanArseno:我觉得现在不再需要这种印象了,因为所有对象都是通过引用来分配的(认为它是在PHP5中),除非明确地指定'clone' d,例如:http://codepad.org/fOSgTiP4。不过,这可能仍是一个好习惯。如果我错了,请告诉我,我想知道。 –

+0

你很可能是正确的,韦斯利。我只是带着信仰的CI文件,并没有进一步考虑它! –

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

+0

我想我们回答了不同的问题,我想OP可以澄清它们的含义。我也遇到过这个问题,特别是需要完全在codeigniter应用程序之外的第三方“插件”中使用CI会话数据。 –

相关问题