我是codeigniter的新手。我想加载管理面板控制器的钩子。
$hook['post_controller_constructor'][] = array(
'class' => 'AdminData',
'function' => 'myfunction',
'filename' => 'loginhelp.php',
'filepath' => 'hooks',
'params' => array()
);
答案 0 :(得分:3)
请清楚阅读该文件https://ellislab.com/codeigniter/user-guide/general/hooks.html
通过设置,可以全局启用/禁用挂钩功能 application / config / config.php文件中的以下项目:
$config['enable_hooks'] = TRUE;
钩子在application / config / hooks.php文件中定义。
您无法为特定控制器加载它。您需要在钩子函数中检查控制器名称并编写代码。假设您的post_controller_constructor
挂钩函数名称为myfunction
,您可以在函数
$CI =& get_instance();
if($CI ->router->class=="AdminData"){//write your code}
答案 1 :(得分:3)
好的,这是最简单的方法:
在控制器中声明一个公共变量
public $is_hookable = TRUE;
然后在你的钩子函数内执行此操作:
$ci=&get_instance();
if($ci->is_hookable){
... enter whatever you want here;
}
希望这很有帮助
答案 2 :(得分:1)
Application/config/hooks.php
$hook['post_controller'] = array(
'class' => 'LogoutBlockedUser',
'function' => 'logout',
'filename' => 'LogoutBlockedUser.php',
'filepath' => 'hooks',
'params' => ""
);
Enable hooks in config.php
$config['enable_hooks'] = TRUE;
Application/hooks/LogoutBlockedUser.php
class LogoutBlockedUser {
public function __construct()
{
}
public function logout()
{
$CI =& get_instance();
if(!(empty($CI->session->userdata('user_id'))))
{
$CI->load->model('Your_model', 'web');
$result = $CI->common->select_query;
if(!empty($result))
{
$CI->session->unset_userdata('user_id');
session_destroy();
redirect(base_url() . 'yourcontroller/function');
}
}
}
}
答案 3 :(得分:0)
加载post_controller_constructor
后调用$class
挂钩。加载的类基于路由参数。
<强>系统/核心/ Codeigniter.php 强>
/**
*<code>
* http://example.com/adminData/method
*</code>
*
* $CI = new adminData(); => application/controllers/adminData.php
**/
$CI = new $class();
$EXT->call_hook('post_controller_constructor');
因此,如果你想在adminData
控制器上调用一个方法,你可以这样做。
这种方法并不理想,因为它不是很像OOP,但是从设计的角度来看CI的构建方式,你必须做一些解决方法,如下面的例子
<强>应用/控制器/ adminData.php 强>
class AdminData extends CI_Controller
{
public function __construct(){}
// This cannot be called directly in the browser
public function _filter()
{
/**
* Put your logic in here
*<code>
* $this->model->logic()
*</code>
**/
exit('I have just be called!');
}
}
<强>应用/钩/ loginhelp.php 强>
class AdminData
{
protected $ci;
public function __construct()
{
global $CI;
$this->ci = $CI;
}
public function myfunction()
{
// If the class is not == AdminData, just bail
if(get_class($this->ci) != 'AdminData') return;
if(!is_callable(array($this->ci, '_filter'))) return;
//calls $AdminData->_filter()
return call_user_func(array($this->ci, '_filter'));
}
}