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