我刚刚开始学习CodeIgniter,我正在通过nettuts +来学习这个认证教程.我不明白其中的一件事:
他在Welcome控制器中添加了以下构造函数代码,只有在Session具有可变用户名时才能访问它,否则它将重定向到admin控制器.
function __construct()
{
session_start();
parent::__construct();
if ( !isset($_SESSION['username'])){
redirect('admin');
}
}
Run Code Online (Sandbox Code Playgroud)
他说:
如果你有多个控制器,那么你应该创建一个新的库来扩展你将要粘贴代码的控制器,而不是在每个控制器中添加上面的代码,而是将库自动加载到项目中.这样,此代码始终在加载控制器时运行.
这是否意味着,我应该
.
if ( !isset($_SESSION['username'])){
redirect('admin');
}
Run Code Online (Sandbox Code Playgroud)
现在如何自动加载这个库,并在每次加载控制器时使其运行,如他所说的那样?谢谢
1)自动加载一个库,只需将它添加到文件application/config/autoload.php中的数组中,查找'library'部分并粘贴库的名称(不带扩展名),作为数组的元素.
$autoload['libraries'] = array ('auth');
Run Code Online (Sandbox Code Playgroud)
2)我建议你使用原生会话处理程序(会话库),它工作得很好,避免你使用php $ _SESSION.您设置宽度$this->session->set_userdata(array('username' => 'User1', 'logged' => 'true'),然后使用$this->session->userdata['logged'],例如,检索值.
像魅力一样工作,不必调用session_start()等.去检查帮助,因为它真的非常清楚.
3)至于你的问题,我会选择"挂钩".有不同的钩子,取决于他们的"位置",即你打电话给他们的那一刻.
你可以使用,例如'post_controller_constructor',它在控制器初始化之后但在方法之前调用,因此它位于构造函数和实际方法之间.我通常在这里插入这些控件.
你在application/config/hooks.php中定义了钩子,给它们一个数组:
$hook['post_controller_constructor'] = array(
'class' => 'Auth',
'function' => 'check',
'filename' => 'auth.php',
filepath' => 'hooks',
'params' => array()
);
Run Code Online (Sandbox Code Playgroud)
无论如何,对于所有这些需求,文档非常明确和直接,我建议你阅读钩子和会话,你会看到一切都变得更加清晰!