在CodeIgniter中的控制器方法内添加post_system挂钩

时间:2016-04-17 12:00:22

标签: codeigniter codeigniter-3 php-5.6

我有一些代码,我希望在请求发送到客户端并关闭后工作,所以我想从控制器内部向系统添加post_system挂钩,因此CodeIgniter挂钩运行仅在调用特定方法时。

3.0rc3允许在某些变通办法中使用吗?

我的版本是Bundle extras = data.getExtras(); Bitmap bitmap = (Bitmap) extras.get("data"); //use bitmap however you like...

2 个答案:

答案 0 :(得分:0)

应该可以。一种方法是设置post_system挂钩,如文档中所述 - $config['enable_hooks'] = TRUE;,在application/config/hooks.php中定义挂钩,并编写钩子类。

在将使用post_system钩子的控制器中定义一个var,用于确定钩子函数是否应该实际运行。在构造函数中将默认值设置为FALSE,并在您考虑的特定方法中将其设置为TRUE。

检查post_system_hook函数中此var的值。您可能希望首先检查控制器是否应该挂钩。我们假设该课程为“欢迎”;

post_system_hook_function(){
     //the type of $CI will be the name of the controller
     if(get_class($CI) !== 'welcome') {
       return false;
     }

    if(! $var_that_flags_do_the_task){
       return false
    }

    //do post system code here

}

答案 1 :(得分:-1)

我知道你想要检查一个控制器,好像它已经记录下来了。

您需要在application / config / config.php

中启用挂钩

$ config ['enable_hooks'] = TRUE;

然后你需要在你的application / config / hooks.php中用代码

添加这一行
$hook['pre_controller'] = array(
                                'class'    => 'PreLogin',
                                'function' => 'auth',
                                'filename' => 'PreLogin.php',
                                'filepath' => 'hooks'
                                );

在您的apllication / hooks / PreLogin.php

class PreLogin{
    public function __construct(){
        $CI =& get_instance();
        $this->CI->load->library('session');
    }

    public function auth(){
        if( ! isset($this->CI->session->userdata('id'))){
            $this->CI->session->set_flashdata('error', 'You do not have permission to enter this url');

            redirect(base_url(), 'refresh');
        }
    }
}