4

名前空間が設定されたカスタムライブラリ(PHP 5.3)を備えたZendFrameworkアプリケーションがあります。

ビューヘルパーを登録したいのですが、ビューヘルパーで使用している名前空間が原因で登録できません。

現在、ブートストラップでヘルパーパスを登録するために次のものがあります。

protected function _initView()
{
    $view = new Zend_View();
    $view->addHelperPath(
        APPLICATION_PATH . "/../library/App/View/Helper",
        "App\View\Helper"
    );
}

私が得るエラー:

Zend_Loader_PluginLoader_Exception:「IsActive」という名前のプラグインがレジストリに見つかりませんでした。使用されるパス:App \ View \ Helper_:

名前空間が設定されたビューヘルパーを登録する方法を知っている人はいますか?

4

3 に答える 3

4

私の設定では、次を使用します。

resources.view.helperPath.Glewz\View\Helper\ = APPLICATION_PATH "/../library/Glewz/View/Helper"

ビューヘルパークラス名とパブリック関数は同じであるため、コンストラクター関数を挿入する必要があることがわかりました。コンストラクターとしてその関数を使用します。PHP 5.3.3以降を使用している場合、これは問題になりません-http ://php.net/manual/en/language.oop5.decon.php- "PHP 5.3.3以降、同じメソッド名前空間付きクラス名の最後の要素としてのnameは、コンストラクターとして扱われなくなります。この変更は、名前空間なしのクラスには影響しません。 "

于 2011-03-27T17:11:30.013 に答える
0

デフォルトのZFのオートローダーは名前空間では機能しないと思います。独自のオートローダーを作成して(またはそれを使用して)、デフォルトとして登録することができます。

于 2011-03-27T11:42:11.470 に答える
0

私のブートストラップでは、これを使用します:

$view->addHelperPath(APPLICATION_PATH . '/../library/App/View/Helper', 'App_View_Helper');

追加:Zend_View_Abstractで__callメソッドをオーバーロードできます。

if ( method_exists($helper, $name) ) {
    $methodName = $name;
} else {
    $methodName = 'direct';
}

return call_user_func_array(array($helper, $methodName), $args);

これを見る

于 2011-03-27T10:11:27.173 に答える