【问题标题】:Prevent Controller from executing阻止控制器执行
【发布时间】:2025-12-11 21:00:01
【问题描述】:

我有一个在 MY_Controller 中运行的 acl。如果权限被拒绝,那么此刻,我只做一个redirect('denied') - 这是一个非常基本的控制器,它加载一个非常基本的视图,说“权限被拒绝”。

但是,我想做的仍然是加载最初请求的 uri,但加载“拒绝”视图而不是默认视图。

我可以在 MY_Controller 中执行此操作,并且拒绝的视图加载正常。但是,这也不会阻止原始控制器/方法的执行,因此我加载了两个视图。在加载被拒绝的视图后,我还尝试在 MY_Controller 中添加 exit; 语句,但这不可行,因为这样输出不会在 CI 中触发。

是否有可能通过 pre_constructor_controller 钩子来做到这一点?我想不出阻止控制器执行的方法...

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您必须让控制器执行才能让请求的 URI 加载。

    检查MY_Controller 中的ACL 后,如果不允许,可以在此处加载denied 视图,但在退出之前还需要做一件事。

    $this->load->view('denied');
    $this->output->_display();
    exit();
    

    【讨论】:

    • 完美! $this->output->_display() 是我要找的。​​span>