2

アクションヘルパーをいくつか書きたいのですが、うまくいっていないようです。

まず、Bootstrapファイルで、次のことを行っています。

Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH.'/controllers/helpers/My/Helper/', 'My_Helper');

このディレクトリには、次のツリーがあります。

My/Helper/
  - Fileupload/
    - Abstract.php
    - Xhr.php
  - Fileupload.php

私のコントローラーでは、fileuploadヘルパー(クラスMy_Helper_Fileupload内)を正常に呼び出しています。

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

しかし、このヘルパーのコンストラクターで、別のヘルパー(クラスMy_Helper_Fileupload_Xhr)を取得しようとしています。

Zend_Controller_Action_HelperBroker::getStaticHelper('Fileupload_Xhr');

エラーにつながる

FileuploadXhrという名前のアクションヘルパーが見つかりません

私は何が間違っているのですか?たくさん試してみましたが、何が悪いのかわかりません...

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

4

2 に答える 2

2

ヘルパーブローカーは、指定したヘルパー名を「正規化」するプロセスの一環として、アンダースコアを削除します。CamelCasedヘルパー名のみを扱うため、Fileupload_Xhrに変換されFileuploadXhrます。

適切なPHPファイルの検索とロードを担当するZend_Loaderは、アンダースコアを使用して、ディレクトリ区切り文字を追加するタイミングを決定します。

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

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

于 2012-05-09T00:51:41.510 に答える
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_です。

于 2012-05-09T03:17:34.703 に答える