Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在cakephp 3.x模型中获取当前控制器操作_Cakephp_Cakephp 3.0_Cakephp 3.x - Fatal编程技术网

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

如何在cakephp 3.x模型中获取当前控制器操作,cakephp,cakephp-3.0,cakephp-3.x,Cakephp,Cakephp 3.0,Cakephp 3.x,我正在使用cakephp 3.x将数据库查询放入模型中,在该模型中,我希望检查当前控制器操作,并在此基础上进行数据库查询 我知道我可以将控制器动作从控制器本身传递到模型函数,但是否有一种方法可以只检查模型中的当前控制器动作,这样我就不需要将其传递到模型中的多个函数中 我的尝试--UsersTable.php public function initialize(array $config) { parent::initialize($config);

我正在使用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;
    }
我也试着用这个

http://localhost/5p_group/users/archived
因此,最终我得到了我想要的结果,但我想要cakephp 3.x使用的另一个合适的方法

那么,有没有其他方法或更频繁的方法可以让我的当前控制器动作

如有任何意见,我们将不胜感激


谢谢

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

使用Cake\Routing\Router

然后在initialize函数中,可以检查如下参数

调试(路由器::getRequest())

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

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

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


有关更多功能参考,您可以访问位于

的食谱,问题是关于一个模型的,但它显示在谷歌上

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


CakePHP 3

这显然违反了关注点分离的规定,即这是一个非常糟糕的想法,你的模型不应该了解外部世界并做出这样的决定!如果控制器需要来自模型的数据,那么它会告诉模型它需要什么样的数据,而不是相反!如果你详细说明你到底需要在什么时候查询什么,你可能会得到更好的帮助。我知道这是没有意义的。。但是了解这些东西是错误的吗?了解这些东西从来都不是错误的,不,比如坏习惯以及如何避免它们。如果你想知道更多,比如如何正确地做,那么请详细说明你正在试图解决的实际技术问题,例如,als已经提到,“你到底需要在什么时候查询什么?”。我同意你的说法,这对我来说是有意义的。谢谢这真是个糟糕的主意,请看上面ndm的评论。模型应不了解控制器/路线,因为它们不一定以这种方式访问。这是一个糟糕的设计模式!是的,我同意,但问题只是说明他可以从控制器传递值,但仍然想知道有没有办法。我知道我可以将控制器动作从控制器本身传递到模型函数,但是否有一种方法可以只检查模型中的当前控制器动作,这样我就不需要将其传递到模型中的多个函数中。-@Mittul只是强调,对于任何跌跌撞撞地跨过这一页的人,都不应该这样做。这是一个非常棘手的解决方案,因为调用方法时,模型中可能不存在
Router::getRequest()->params['action']
。模型不依赖于控制器,答案是这样的。我已经说过,要使用它,你需要在顶部使用Cake\Routing\Router;我还说这是一个黑客。因此,我澄清了我自己,这已经是基于用户的具体需求。否则就不应该这样做。@mittul请你澄清一下,这是否符合你的目的。
echo '<pre>';
print_r($GLOBALS['_SERVER']['HTTP_REFERER']);        
exit;
http://localhost/5p_group/users/archived
\Cake\Routing\Router::getRequest()->getAttributes();