【问题标题】:CakePHP 1.3 - Calling requestAction() with router-created URL from a shell causes "Missing Controller" errorCakePHP 1.3 - 从 shell 使用路由器创建的 URL 调用 requestAction() 会导致“缺少控制器”错误
【发布时间】:2023-03-18 23:28:01
【问题描述】:

我有一个 CakePHP 1.3 shell,它需要使用 requestAction() 从单独的控制器生成 HTML。该调用的 URL 是使用以下命令生成的:

$url = Router::url(array('controller' => 'my_controller', 'action' => $action_str));
$data = array('url' => array('ext' => 'json'), 
              'return' => 'return',
              'pass' => array('an_id_str' => $an_id));

$action_str、'an_id_str' 和 $an_id 是我的代码中唯一在调用之间发生变化的东西,并且 requestAction() 是这样调用的:

$this->requestAction($url, $data);

注意:由于 $action_str 可以在每次调用时更改,它会为每个单独的 requestAction() 调用生成新的 $url。

第一次调用 requestAction() 时效果很好。我第二次调用 requestAction() 时,它会抛出以下错误:

"Error: Missing Controller 'c:\...\cake\console'"

有什么想法可能导致路由器搞砸了,我该如何解决?

请注意 - 这实际上发生在几个使用相似功能的不同 shell 中。

【问题讨论】:

  • 我有点困惑第一次和第二次调用该函数的方式有何不同。您是在完全相同的情况下调用它们还是调用依赖于某些逻辑?我的第一个想法是 URL 重写以某种方式把你弄乱了。你能提供更多关于你所打电话的详细信息吗?
  • 唯一的区别是动作有时不同,提供给调用的数据也不同。 $this->requestAction($url, $data);其中 $url 是路由器提供的 URL, $data 是一个数组('url' => array('ext' => 'json'), 'return' => 'return', 'pass' => array('an_id_str ' => $an_id))
  • 它在指定的 URL 处调用控制器/操作,生成用于导出的文件并将文件通过电子邮件发送给给定的用户。
  • 以前没有人遇到过这个问题?

标签: cakephp cakephp-1.3


【解决方案1】:

感谢您的评论,它澄清了您所问的问题。您需要做的是在 Router::url 调用中指定您希望在构建它时使用完整的 URL。为此,您只需将true 选项放在末尾即可。

$url = Router::url(array('controller' => 'tests', 'action' => 'trial'), true);

【讨论】:

  • 这没什么用...我已经知道生成的 URL 是错误的(我在帖子中说过很多次),事实上这就是问题所在。该问题仅在我第一次调用 requestAction() 后发生,因此 Cake 中的某些内容在该调用期间破坏了功能。
  • @Derek,我现在明白你在问什么。我已经更新了我的答案。我也对其进行了测试,它对我有用。
  • 投票赞成,因为它为我指明了正确的方向,但这并没有解决它。详情见我的回答
【解决方案2】:

这个问题的正确解决方法是在我的 $url 数组中

Router::url(array('controller' => 'my_controller', 'action' => $action_str));

我需要添加'base'键并将其设置为false:

Router::url(array('controller' => 'my_controller', 'action' => $action_str, 'base' => false));

来自http://api13.cakephp.org/view_source/router#line-733 的文档:

'有一些'特殊'参数可以改变生成的最终 URL 字符串

  • base - 设置为 false 以从生成的 url 中删除基本路径。如果您的应用程序不在根目录中,这可用于生成“蛋糕相关”的 url。使用 requestAction 时需要 cake 相对 url。"'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2013-07-09
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多