如何在 cakephp 3.x 模型中获取当前控制器操作

How to get current controller action in cakephp 3.x model

我正在使用 cakephp 3.x 已将数据库查询放入我想检查当前控制器操作的模型中,并基于此我将进行数据库查询.

我知道我可以将控制器动作从我的控制器本身传递到我的模型函数,但是有没有一种方法我可以只检查我模型中的当前控制器动作,这样我就不需要在我的多个函数中传递它仅在模型内部。

我的尝试 -- UsersTable.php

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->table('users');        
        $this->primaryKey('user_id');
        echo '<pre>';
        print_r($GLOBALS);        
        exit;
    }

到目前为止,如果我这样做,我得到了一个数组作为响应,我发现这是该数组中其他事物中最好的结果

[REQUEST_URI] => /5p_group/users/add

我也在尝试使用这个

echo '<pre>';
print_r($GLOBALS['_SERVER']['HTTP_REFERER']);        
exit;

这给了我这个输出

http://localhost/5p_group/users/archived

所以最终我得到了我想要的结果,但我想要另一种正确的方法,cakephp 3.x 使用..

那么有没有其他方法或更频繁的方法可以让我获得当前的控制器操作?

任何想法将不胜感激..

谢谢

首先你应该在你的模型中使用路由class。所以在顶部你可以像下面这样称呼它

use Cake\Routing\Router;

然后在您的初始化函数中,您可以检查

之类的参数

debug(Router::getRequest());

或者更具体地说,您可以使用

debug(Router::getRequest()->params['action']);

我认为这是仅使用 cakephp classes 的解决方案,虽然是一个小 hack。

如需更多功能参考,您可以在 Router Class

访问说明书

问题是关于模型的,但它出现在 Google。

在视图(.ctp 文件)中时,使用

\Cake\Routing\Router::getRequest()->getAttributes();

CakePHP 3