基本上在codeigniter中,我如何在其他库中使用系统和应用程序库?所以说我有一个应用程序库,例如:
class User
{
// some instance variables
}
现在假设我想在 User 类中使用 codeigniter 会话类,基本上可以在 User 类中使用会话。我该怎么做呢?
基本上在codeigniter中,我如何在其他库中使用系统和应用程序库?所以说我有一个应用程序库,例如:
class User
{
// some instance variables
}
现在假设我想在 User 类中使用 codeigniter 会话类,基本上可以在 User 类中使用会话。我该怎么做呢?
执行此操作的典型方法是使用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 库的典型流程。
理想情况下,您只需从模型或控制器中传入所需的会话数据即可加载库。
否则,这应该适用于任何文件:
<?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');
?>
我在一个类似的问题上找到了这个答案。