2

したがって、モジュールにアクセスするときに、次のようにカスタム アクション ヘルパーから「url」アクション ヘルパーを使用しても、通常は問題ありません。

$urlHelper = Zend_Controller_Action_HelperBroker::getExistingHelper('url');

ただし、デフォルト モジュール (ルート URL、/) にアクセスすると、次のエラーが発生します。

致命的なエラー: /home/erahhal/Code/ZendFramework-1.11.12/library/Zend/Controller/Plugin/Broker.php で、「アクション ヘルパー "Url" はヘルパー ブローカーに登録されていません」というメッセージを含むキャッチされない例外 'Zend_Controller_Action_Exception' 336行目

この問題の根本は何ですか?

4

1 に答える 1

2

多くの場合、コントローラーまたはアクション ヘルパーのコンテキスト外で URL ヘルパーを使用したい場合は、自分でヘルパーの新しいインスタンスを作成するだけです。

URL ヘルパーを取得して使用するには、次のコードを使用できるはずです。

$urlHelper = new Zend_Controller_Action_Helper_Url();
$url       = $urlHelper->url(array('controller' => 'foo',
                                   'action'     => 'bar',
                                   'module'     => 'mod'));

このエラーが発生した理由はわかりませんが、ヘルパーがまだフロント コントローラーに登録されていない場合 (アプリケーション ディスパッチの早い段階でこれを呼び出している可能性がありますか?)、getStaticHelper()代わりに を使用してみてくださいgetExistingHelper():

$urlHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('url');

URL ヘルパーがまだプラグイン ローダーに登録されていない場合は、登録してロードします。

ヘルパーブローカーのドキュメントから:

ヘルパー ブローカーからヘルパーを取得するための 2 つの静的メソッドもありgetExistingHelper()ますgetStaticHelper()getExistingHelper()ヘルパー ブローカーによって以前に呼び出されたか、明示的に登録されている場合にのみ、ヘルパーを取得します。そうでない場合は例外がスローされます。getStaticHelper()と同じ getExistingHelper()ことを行いますが、ヘルパー スタックにまだ登録されていない場合は、ヘルパーのインスタンス化を試みます。getStaticHelper()設定したいヘルパーを取得するのに適しています。

于 2012-07-25T21:34:40.530 に答える