2

別のコントローラーからHTMLを生成するためにrequestAction()を使用する必要があるCakePHP1.3シェルがあります。その呼び出しの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()呼び出しが初めて行われるとき、それはうまく機能します。2回目にrequestAction()を呼び出すと、次のエラーがスローされます。

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

ルーターがこれを台無しにする原因となる可能性のあるアイデアと、それを修正するにはどうすればよいですか?

1つの注意-これは実際には、同様の機能を使用するいくつかの異なるシェルで発生します。

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));

'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を使用する場合は、ケーキの相対URLが必要です。 "'
于 2013-01-23T15:32:39.047 に答える