2012-05-08 8 views
2

私はいくつかのアクションヘルパーを書いていますが、それはうまくやっていないようです。アクションヘルパーの包含エラー+ getActionControllerがnull

まず第一に、私のブートストラップファイルには、私は次のことをやっている:

このディレクトリで
Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH.'/controllers/helpers/My/Helper/', 'My_Helper'); 

、私は次の木があります私のコントローラで

を、私は正常に呼び出しますファイルアップロードヘルパー(クラスMy_Helper_Fileupload):

$res = $this->_helper->fileupload($directory); 

しかし、コンストラクタこのヘルパーの、私は(クラスMy_Helper_Fileupload_Xhrに)別のヘルパーを取得しようとしていますiwth:見つからない名前FileuploadXhrによるエラー

アクションヘルパーに私を導く

Zend_Controller_Action_HelperBroker::getStaticHelper('Fileupload_Xhr'); 

私は間違って何をしていますか?私はたくさんのものを試しましたが、何が間違っているのか分かりません...

さらに、いくつかのテストの後、getActionControllerメソッドを呼び出すと、fileuploadヘルパーの私のコンストラクタでNULLになっているようです。自動的に設定されていないのでしょうか?

+0

ここでは2つの異なる質問をしました。あなたはパスとローディングに関する多くの詳細を述べました。私はその質問に答えました。それはおそらく、この1つから2番目の質問を編集し、それ自身の本質的な質問として、いくつかのより多くの情報とそれを投稿することが最善でしょう。 –

答えて

2

ヘルパーブローカーは、与えたヘルパー名を「正規化」するプロセスの一部としてアンダースコアを削除します。 CamelCasedヘルパー名しか扱わないので、Fileupload_XhrFileuploadXhrに変換されます。

正しいPHPファイルの検索とロードを終了するZend_Loaderは、ディレクトリセパレータをいつ追加するべきかを決定するためにアンダースコアを使用します。

これらの2つを組み合わせると、アクションヘルパーブローカーのパスの下にネストされたフォルダー構造を持つことはできません。 addPathで追加されたパスに対してロードできるヘルパークラスはすべて、サブフォルダを介さずに、指定されたパスのすぐ下に存在する必要があります。

単純な解決策は、My/Helper/Fileupload/Xhr.phpからMy/Helper/FileuploadXhr.phpにヘルパーを移動することです。

1

あなたのappnamespaceとしてMyを使用していると仮定すると - これは私が通常行っていることです。 Applicationが長すぎて入力することはできません - これがその方法の1つです。ブートストラップで

Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH .'/controllers/helpers', 'My_Controller_Helper');

My_Controller_Helper_SomeHelperとして、あなたのヘルパークラスに名前を付け、ファイルapplication/controllers/helpers/SomeHelper.phpに保管してください。使用してコントローラで

起動:

$this->_helper->someHelper()

をごappnamespaceが異なる場合は、ちょうどあなたのappnamespaceでMy_を交換してください。