2012-10-15 59 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會話數據。 –

相關問題