CakePHP 获取动作名称
Posted
技术标签:
【中文标题】CakePHP 获取动作名称【英文标题】:CakePHP get action name 【发布时间】:2014-07-07 10:41:29 【问题描述】:在 Cakephp 中,可以使用
$this->action
语法。它返回所调用内容的文字字符串,因此如果 URL 是 /do_this
,则返回 do_this
,如果是 doThis
,则返回 doThis
。不管被调用方法的真名。
另一方面,我正在寻找的是被调用方法的实际名称,无论 URL 语法如何。
有没有办法找到它?
我最好能够在beforeFilter
方法中执行此操作。
【问题讨论】:
它是 cakephp 的干净 url 的结构,无论你在 url 中写入什么,都会调用该动作。例如 www.domain.com/x/y 将在 x 控制器中调用 y 动作。这是在您的 .htaccess 文件中定义的。 如果您能解释一下您要解决的实际问题会有所帮助,即为什么您需要确切的方法名称?附言。请始终提及您的确切 CakePHP 版本并相应地标记您的问题! 也许您可以采取行动,然后为每种可能的情况执行if(method_exists('doThis'))
。但是同意 ndm,如果你澄清你的意图,可能会有更好的方法。 (另见function_exists
)
【参考方案1】:
你应该使用请求对象。
CakePHP 3.3 及以下
$this->request->params['action'];
自 3.4 起
$this->request->getParam('action');
我认为这应该包含被调用的真实方法名称。 CakePHPs 路由器将字符串 URL 解析为控制器/动作对和其他参数,所有这些都以请求对象结束。阅读文档并在 beforeFilter() 中执行 debug($this->request);
以查看还有什么。
【讨论】:
不幸的是,它还返回查询中使用的字符串,而不是函数的实际名称。【参考方案2】:在 CakePHP 2 中你可以使用 $this->action,在 CakePHP 3 中你必须使用 $this->request->params['action']
【讨论】:
您能否提供一些文档的参考,其中提到了这一点?如果可能的话,还有一个例子。【参考方案3】:params
数组 (CakePHP >= 3.4) 已弃用在控制器中获取当前操作的正确方法是:
$currentAction = $this->request->getParam('action');
【讨论】:
非常适合我。【参考方案4】:你看过这个吗? Retrieving the name of the current function in php 这显然在 beforeFilter 中不起作用。您可以设置一个变量: 控制器中的私有 $action_name 并从方法中设置它,然后在 afterFilter 中使用它
【讨论】:
不幸的是,这对我来说太晚了。对不起。 也就是说,在运行时内为时已晚。我需要早在 beforeFilter 函数中就知道即将调用的函数。以上是关于CakePHP 获取动作名称的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 调用 cakephp 动作并将数组作为参数传递
CakePHP hasOne belongsTo 关系,编辑/添加相同动作