Codeigniter中的钩子

时间:2014-05-22 11:35:17

标签: codeigniter hook

如何只为几个控制器而不是CodeIgniter中的所有控制器调用挂钩?

例如:我想只为admin部分运行钩子。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:5)

在您希望有选择地运行的挂钩中,您可以使用$this->ci =& get_instance();访问ci超级项目。这充当指针,可用于访问CodeIgniter路由器以使用$class = $this->ci->router->fetch_class();确定类。然后,您可以检查$class是否与某个值匹配。这会给你:

<?php class Post_controller_constructor {
    var $ci;

    function __construct() {

    }

    function index()
    {
        $this->ci =& get_instance();
        $class = $this->ci->router->fetch_class();
        if($class === 'admin') {
            // Hook procedures
        }
    }
}

/* End of file post_controller_constructor.php */
/* Location: ./application/hooks/post_controller_constructor.php */

答案 1 :(得分:0)

您可以通过在钩子中检查应用程序的URL来完成此操作:

$hook = false;
if(strpos($_SERVER['REQUEST_URI'],"admin/"))
$hook = true;
if($hook) {
// do some hook stuff
}

答案 2 :(得分:0)

首先,您将在 config/config.php 文件中启用挂钩

$config['enable_hooks'] = TRUE;

比打开config/hooks.php文件

比定义挂钩

$hook['post_controller_constructor']  = array(  
    'class'     => 'Post_controller_constructor',      // Class Name
   'function'  => 'check_status',     // Function Name
   'filename'  => 'Post_controller_constructor',   // File Name in Hook Folder
   'filepath'  => 'hooks'       // Controller Path
);

比在hooks/hooks.php之类的挂钩文件夹中创建挂钩文件 打开文件

在这里, 在希望有选择地运行的挂钩中,可以使用$this->ci =& get_instance();访问ci超级对象。这充当指针,可用于访问CodeIgniter路由器以使用$class = $this->ci->router->fetch_class();确定类。然后,您可以检查$ class是否匹配某个值。这会给你:

<?php class Post_controller_constructor {
    var $ci;

    function __construct() {

    }

    function check_status()
    {
        $this->ci =& get_instance();
        $class = $this->ci->router->fetch_class();
        if($class === 'admin') {
            // Hook procedures
        }
    }
}

/* End of file post_controller_constructor.php */
/* Location: ./application/hooks/post_controller_constructor.php */