2

我有一个 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 中。

4

2 回答 2

1

感谢您的评论,这澄清了您所问的问题。您需要做的是Router::url在构建时指定要使用完整 URL 的调用。为此,您只需将true选项放在最后。

$url = Router::url(array('controller' => 'tests', 'action' => 'trial'), true);
于 2013-01-16T17:15:04.860 回答
0

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

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

我需要添加“基本”键并将其设置为 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。"'
于 2013-01-23T15:32:39.047 回答