如何使用params /获取CodeIgniter中的钩子控制器?

时间:2013-12-17 15:37:20

标签: php codeigniter hook

我有一个后控制器钩子:

$hook['post_controller'][] = array(
    'class'    => 'PostControllerHook',
    'function' => 'post_controller',
    'filename' => 'PostControllerHook.php',
    'filepath' => 'hooks',
    'params'   => array('controller')
);

hooks documentation说我可以为我的钩子指定参数。如何指定这些参数?此外,我需要访问我的控制器对象,这就是我试图将其作为参数传递的原因。

1 个答案:

答案 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 中。有点复杂,但也不算太差。