基本上在codeigniter中,我如何在其他庫中使用系統和應用程序庫?所以說,我有一個應用程序庫,如:,我如何在庫中使用系統和應用程序庫?
class User
{
// some instance variables
}
現在可以說,我想用笨會話類的用戶類,基本上能夠與用戶類中的會話。我怎麼能這樣做呢?
基本上在codeigniter中,我如何在其他庫中使用系統和應用程序庫?所以說,我有一個應用程序庫,如:,我如何在庫中使用系統和應用程序庫?
class User
{
// some instance variables
}
現在可以說,我想用笨會話類的用戶類,基本上能夠與用戶類中的會話。我怎麼能這樣做呢?
這樣做的典型方法是使用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庫的典型流程。
理想情況下,您只需傳入需要從模型或控制器加載庫的會話數據。
否則,這應該從任意文件中工作:
<?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。
我想我們回答了不同的問題,我想OP可以澄清它們的含義。我也遇到過這個問題,特別是需要完全在codeigniter應用程序之外的第三方「插件」中使用CI會話數據。 –
不要忘記通過引用來指定:'= &' ;) –
@JordanArseno:我覺得現在不再需要這種印象了,因爲所有對象都是通過引用來分配的(認爲它是在PHP5中),除非明確地指定'clone' d,例如:http://codepad.org/fOSgTiP4。不過,這可能仍是一個好習慣。如果我錯了,請告訴我,我想知道。 –
你很可能是正確的,韋斯利。我只是帶着信仰的CI文件,並沒有進一步考慮它! –