如何只为几个控制器而不是CodeIgniter中的所有控制器调用挂钩?
例如:我想只为admin部分运行钩子。我怎样才能做到这一点?
答案 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 */