我有一个后控制器钩子:
$hook['post_controller'][] = array(
'class' => 'PostControllerHook',
'function' => 'post_controller',
'filename' => 'PostControllerHook.php',
'filepath' => 'hooks',
'params' => array('controller')
);
hooks documentation说我可以为我的钩子指定参数。如何指定这些参数?此外,我需要访问我的控制器对象,这就是我试图将其作为参数传递的原因。
答案 0 :(得分:1)
您正确传递参数。
您是否希望在 post_controller 挂钩之前访问刚刚运行的控制器?这不会像你期望的那样有效。 Code Igniter会尝试实例化一个类,如果你为它传递一个类,那么你就不能直接传递控制器实例。
想象一下,首先你有一个控制器
class Blog extends CI_Controller
{
public function doHookStuff()
{
echo "I'm running in a hook I hope!";
}
}
您可以从钩子中调用get_instance
帮助函数。
class PostControllerHook
{
function post_controller($params)
{
// $params[0] = 'controller' (given the params in the question)
// $controller is now your controller instance,
// the same instance that just handled the request
$controller =& get_instance();
$controller->doHookStuff();
}
}
如果您需要更多信息,所有答案都位于 system / core / CodeIgniter.php 和 system / core / Hooks.php 中。有点复杂,但也不算太差。