Codeigniter中的挂钩

4ktjp1zp  于 2022-12-07  发布在  其他
关注(0)|答案(3)|浏览(92)

如何在CodeIgniter中只为少数控制器而不是所有控制器调用钩子?
例如:我想只运行管理部分的钩子。我怎样才能做到这一点?

brjng4g3

brjng4g31#

在您希望选择性运行的挂接中,您可以使用$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 */
4ngedf3f

4ngedf3f2#

你可以简单地通过在钩子中检查你的应用程序的url来完成它:

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

watbbzwu3#

首先,您将在**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文件,类似于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 */

相关问题