2016-10-04 110 views
1

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

到目前为止,如果我这样做,我响应了一个数组,其中我发现了这一点,在其他事情最好的结果阵列

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

我M还尝试使用此

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

这给了我这个输出

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

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

那么,有没有任何其他方式或更频繁的方式,我可以得到我目前的控制器行动?

任何想法可以理解..

感谢

+6

这是一个明显违反了关注点分离的,即一个非常糟糕的主意访问的菜谱,你的模型是不是应该了解外面的世界,做这样的决定!如果一个控制器需要一个模型的数据,那么它会告诉模型它想要什么数据,而不是相反!如果你详细说明你需要查询_什么时候正确_什么时候你可以得到更好的帮助。 – ndm

+0

我知道它没有道理..但知道这些东西是错误的吗? –

+0

知道东西是绝对不会错的,不喜欢不好的做法以及如何避免它们。如果你想知道更多,比如如何以正确的方式来做,那么请详细说明你正在试图解决的实际技术问题,即已经提到的als,“你究竟需要什么来查询_什么时候正确?”。 。 – ndm

回答

2

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

use Cake\Routing\Router;

然后在你的初始化函数可以检查PARAMS像

debug(Router::getRequest());

或者更具体一些,你可以使用

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

我认为这是使用c只有akephp类,尽管是一个小黑客。

更多功能的参考,你可以在Router Class

+1

这是一个非常糟糕的主意,请参阅上面的ndm评论。模型应该不知道控制器/路由,因为它们不一定以这种方式访问​​。这是一个糟糕的设计模式! – drmonkeyninja

+1

是的,我同意,但这个问题只是说他可以传递控制器的值,但仍然想知道是否有办法。 **我知道我可以从我的控制器本身传递控制器动作到我的模型函数,但有没有办法我只能检查我的模型中的当前控制器动作,这样我就不需要将它传递给我的多个函数仅限于模型内部。** - @mittul –

+2

只要突出显示,不应该为任何人在此页面中绊倒而完成此操作。这是一个非常冒险的解决方案,因为调用方法时,模型中可能不存在'Router :: getRequest() - > params ['action']'。模型不像这个答案那样依赖于控制器。 – drmonkeyninja

相关问题