在CodeIgniter中添加新库

时间:2011-05-28 08:57:51

标签: php codeigniter

我刚刚开始学习CodeIgniter,我正在通过nettuts +关注this身份验证教程。我不明白其中的一件事:

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

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

        if ( !isset($_SESSION['username'])){
            redirect('admin');      
        }       
    }
他说:

  

如果你有多个控制器,那么   而不是添加上面的代码   每个控制器,你应该创建一个   新的图书馆,扩展了   你将把代码粘贴到控制器中,   并将库自动加载到   项目。这样代码运行   总是在加载控制器时。

是否意味着,我应该

  1. 在应用程序/库中创建一个文件(例如,auth.php)
  2. 将此代码粘贴到auth.php
  3. if ( !isset($_SESSION['username'])){
                redirect('admin');      
            }
    

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

3 个答案:

答案 0 :(得分:5)

1)自动加载库,只需将其添加到文件application / config / autoload.php中的数组中,查找“库”部分并将库的名称(不带扩展名)粘贴到那里,作为元素数组。

$autoload['libraries'] = array ('auth');

2)我建议你使用原生会话处理程序(会话库),它运行得很好并且避免使用php $ _SESSION。您设置宽度$this->session->set_userdata(array('username' => 'User1', 'logged' => 'true'),然后使用$this->session->userdata['logged']检索值,例如。

像魅力一样工作,不必调用session_start()等。去检查帮助,因为它真的非常清楚。

3)至于你的问题,我会选择“钩子”。有不同的钩子,取决于他们的“位置”,即你打电话给他们的那一刻。

对于ex ..'post_controller_constructor',你可以使用它,它在控制器初始化之后但在方法之前被调用,因此它位于构造函数和实际方法之间。我通常在这里插入这些控件。

您在application / config / hooks.php中定义了钩子,并为它们提供了一个数组:

   $hook['post_controller_constructor'] = array(
      'class'    => 'Auth',
       'function' => 'check',
       'filename' => 'auth.php',
        filepath' => 'hooks',
        'params'   => array()
    );

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

答案 1 :(得分:1)

将新库添加到config / autoload.php中的自动加载库数组中。

$autoload['libraries'] = array ('database', 'session', 'auth');

然后,当您想在控制器构造函数中调用该函数时,请使用$this->auth->function_name();。  如果您不希望在每个构造函数中调用大量重复功能,则可能需要将其设为hook

答案 2 :(得分:1)

另一种方法。这就是他在教程中的意思。

  1. MY_Controller文件夹中创建一个名为application/libraries的库,并从CI_Controller扩展它:

    Class MY_Controller extends CI_Controller {
        public function __construct()
        {
            parent::__construct();
            // do the stuff you want to execute on every page.
            // like auth.
        }
    }
    
  2. auth配置文件中自动加载autoload.php类。无需自动加载MY_Controller CodeIgniter会自动识别并运行它。您还可以在Auth
  3. 中加载MY_Controller
  4. 使用MY_Controller课程扩展您的控制器。 (不是CI_Controller
  5. 扩展控制器可以更好地控制您的项目。您可以添加额外的方法以在项目的任何位置使用。

    有关扩展CodeIgniter的本机库的更多信息,请检查Creating Libraries: CodeIgniter