在CodeIgniter中添加新库

Rom*_*man 4 php codeigniter

我刚刚开始学习CodeIgniter,我正在通过nettuts +来学习这个认证教程.我不明白其中的一件事:

他在Welcome控制器中添加了以下构造函数代码,只有在Session具有可变用户名时才能访问它,否则它将重定向到admin控制器.

function __construct()
    {
        session_start();
        parent::__construct();

        if ( !isset($_SESSION['username'])){
            redirect('admin');      
        }       
    }
Run Code Online (Sandbox Code Playgroud)

他说:

如果你有多个控制器,那么你应该创建一个新的库来扩展你将要粘贴代码的控制器,而不是在每个控制器中添加上面的代码,而是将库自动加载到项目中.这样,此代码始终在加载控制器时运行.

这是否意味着,我应该

  1. 在应用程序/库中创建一个文件(例如,auth.php)
  2. 将此代码粘贴到auth.php中

.

if ( !isset($_SESSION['username'])){
            redirect('admin');      
        }
Run Code Online (Sandbox Code Playgroud)

现在如何自动加载这个库,并在每次加载控制器时使其运行,如他所说的那样?谢谢

Dam*_*rsy 5

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)

无论如何,对于所有这些需求,文档非常明确和直接,我建议你阅读钩子和会话,你会看到一切都变得更加清晰!