【问题标题】:How to get current controller action in cakephp 3.x model如何在 cakephp 3.x 模型中获取当前控制器动作
【发布时间】:2017-02-12 04:26:01
【问题描述】:

我正在使用 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 使用..

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

任何想法将不胜感激..

谢谢

【问题讨论】:

  • 这明显违反了关注点分离,即一个非常糟糕的主意,您的模型不应该了解外部世界并做出这样的决定!如果控制器想要来自模型的数据,那么它会告诉模型它想要什么数据,而不是相反!如果您详细说明究竟是什么您需要查询究竟是什么时候,您可能会得到更好的帮助。
  • 我知道这没有意义..但是知道这些东西有错吗?
  • 了解一些事情永远不会错,不,比如不良做法以及如何避免它们。如果您想了解更多信息,例如如何以正确的方式进行操作,请详细说明您正在尝试解决的实际技术问题,即前面已经提到过,“究竟是什么需要查询究竟是什么时候?”。
  • 我同意你的这一说法,这对我来说很有意义。谢谢

标签: cakephp cakephp-3.0 cakephp-3.x


【解决方案1】:

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

use Cake\Routing\Router;

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

debug(Router::getRequest());

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

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

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

如需更多功能参考,您可以通过Router Class访问说明书

【讨论】:

  • 这是一个非常糟糕的主意,请参阅上面 ndm 的评论。模型应该不知道控制器/路由,因为它们不一定以这种方式访问​​。这是一个糟糕的设计模式!
  • 是的,我同意,但问题只是表明他可以从控制器传递值,但仍然想知道是否有解决方法。 我知道我可以将控制器动作从我的控制器本身传递给我的模型函数,但是有没有办法我可以只检查我的模型中的当前控制器动作,这样我就不需要在我的多个函数中传递它仅限内部模型。 - @mittul
  • 只是强调不应该对任何偶然发现此页面的人执行此操作。这是一个非常 hacky 的解决方案,因为在调用该方法时,模型中可能不存在 Router::getRequest()-&gt;params['action']。模型不像这个答案那样依赖于控制器。
  • 我已经说过,要使用它,您需要在顶部放置这一行 use Cake\Routing\Router; 我还告诉过这是一个 hack。因此,我澄清了自己,这已经基于用户的特定需求。否则不应这样做。
  • @mittul 你能澄清一下吗,这是否达到了你的目的。
【解决方案2】:

问题是关于模型的,但它显示在 Google 上。

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

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

CakePHP 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多