CakePHP 1.3 - 使用来自shell的路由器创建的URL调用requestAction()会导致“Missing Controller”错误

时间:2013-01-04 15:49:43

标签: cakephp cakephp-1.3

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

此问题的正确解决方法是在我的$ 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。使用requestAction时需要cake cake urls。“'