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 获取动作名称的主要内容,如果未能解决你的问题,请参考以下文章

在 cakephp 3 中获取记录时更改字段名称

使用 jquery 调用 cakephp 动作并将数组作为参数传递

CakePHP hasOne belongsTo 关系,编辑/添加相同动作

CakePHP:以数组为参数调用另一个控制器动作的最佳方法?

cakephp 你如何在模型中调用控制器的动作

Cakephp URL 蛞蝓问题