【发布时间】:2014-07-11 10:10:42
【问题描述】:
如何在 CodeIgniter 中只为几个控制器而不是所有控制器调用钩子?
例如:我只想为管理部分运行挂钩。我怎样才能做到这一点?
【问题讨论】:
-
您可以尝试在钩子中获取控制器名称,然后仅在
admin时运行代码。 ellislab.com/forums/viewthread/62981/#778802
标签: codeigniter hook
如何在 CodeIgniter 中只为几个控制器而不是所有控制器调用钩子?
例如:我只想为管理部分运行挂钩。我怎样才能做到这一点?
【问题讨论】:
admin时运行代码。 ellislab.com/forums/viewthread/62981/#778802
标签: codeigniter hook
在您希望有选择地运行的钩子中,您可以使用$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 */
【讨论】:
你可以简单地通过在你的钩子中检查你的应用程序的 url 来做到这一点:
$hook = false;
if(strpos($_SERVER['REQUEST_URI'],"admin/"))
$hook = true;
if($hook) {
// do some hook stuff
}
【讨论】:
首先您将在 config/config.php 文件中启用 Hooks
$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 */
【讨论】: