在CodeIgniter控制器中的任何其他方法之前先运行一个方法


Run a method before any other method in a CodeIgniter controller

在CakePHP中,我们有beforeFilterafterFilter在任何控制器方法之前或之后运行方法(例如保存日志或检查登录等)

如何在CodeIgniter中执行此操作?

您将希望利用Codeigniter中的钩子,也就是说,它们在框架代码的某些点之前实现了您想要的运行代码的功能。

https://www.codeigniter.com/user_guide/general/hooks.html

有一些内置挂钩允许您在请求过程中的不同点调用方法或类:

pre_system
pre_controller
post_controller_constructor
post_controller
display_override
cache_override
post_system

所以你想要的可能是类似于pre_system或pre_controller的东西。

查看_remap()函数。它允许您在调用正常控制器函数之前重定向到自己的函数。您可以在控制器中包含自己的_remap功能,如下所示(复制自《用户指南》):

public function _remap($method)
{
    if ($method == 'some_method')
    {
        $this->$method();
    }
    else
    {
        $this->default_method();
    }
}

URI的第二段作为参数传递给_remap函数(在示例中为$method),然后您可以根据需要重定向进程。