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

Mit*_*ave 2 cakephp cakephp-3.0 cakephp-3.x

我正在使用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;
    }
Run Code Online (Sandbox Code Playgroud)

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

[REQUEST_URI] => /5p_group/users/add
Run Code Online (Sandbox Code Playgroud)

我也在尝试使用这个

echo '<pre>';
print_r($GLOBALS['_SERVER']['HTTP_REFERER']);        
exit;
Run Code Online (Sandbox Code Playgroud)

这给了我这个输出

http://localhost/5p_group/users/archived
Run Code Online (Sandbox Code Playgroud)

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

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

任何想法将不胜感激..

谢谢

Roh*_*ani 5

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

use Cake\Routing\Router;

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

debug(Router::getRequest());

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

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

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

有关更多功能参考,您可以访问Router Class 中的食谱

  • 只是强调,对于在此页面上磕磕绊绊的任何人,永远不应该这样做。这是一个非常棘手的解决方案,因为调用该方法时,模型中可能不存在`Router::getRequest()-&gt;params['action']`。模型不依赖于像这个答案那样的控制器。 (2认同)