0

Zend Navigation を使用してメニューを作成しています。レイアウト スクリプトで使用する$this->navigation( )と、メニューが完全にレンダリングされます。しかし、ビュー スクリプトで同じコードを使用して同じメニューをレンダリングしようとすると、何もレンダリングされません。

これは、Zend_Navigation を開始してレイアウト スクリプトにアタッチするためにブートストラップで使用するコードです。

protected function _initNavigation( )
{
    $this->bootstrap( 'layout' );
    $layout = $this->getResource( 'layout' );

    $view = $layout->getView( );
    $config = new Zend_Config_Xml( APPLICATION_PATH . '/configs/navigation.xml', 'nav' );
    $navigation = new Zend_Navigation( $config );

    $view->navigation( $navigation );
    $view->addHelperPath( 'App/View/Helper/Navigation', 'App_View_Helper' );
}

私はしばらくこの問題に取り組んできましたが、次のコードをブートストラップに追加する必要があることがわかりました。

protected function initView( ) { }

しかし、なぜこの役に立たないコードを配置する必要があるのか​​ 疑問に思っています。このトピックによると、次の行を使用して、application.ini でビュー リソースを既にブートストラップしています。

resources.view.basePath = APPLICATION_PATH "/views"
resources.view.helperPath = APPLICATION_PATH "/views/helpers"

前もって感謝します!

4

1 に答える 1

0

ブートストラップで空の initView() を使用した場合と同じ効果で、ini から resources.view を削除できます。ビューはブートストラップされません。

私は何が起こっているのか推測していると思います。ナビゲーションをどこで設定していますか?

upd: ビュー インスタンスを取得するために、なぜそのような奇妙な方法を使用するのですか?

protected function _initNavigation( )
{
    $this->bootstrap( 'view' );
    $view = $this->getResource( 'view' );
    ///...
}

メソッドを次のように置き換えます

protected function _initNavigationPages( )
{
    $this->bootstrap( 'navigation' );
    $navigation = $this->getResource( 'navigation' );

    $config = new Zend_Config_Xml( APPLICATION_PATH . '/configs/navigation.xml', 'nav' );
    $navigation->addPages($config);
}

Zend_Registry の 'Zend_Navigation' キーの下に登録する場合は " resources.navigation.storage.registry = true "を構成に追加するか、" resources.navigation[] = " ビュー ヘルパーに保存する場合は " resources.navigation[] = " を追加します。

ビュー ヘルパー パス/プレフィックス セットアップの表示構成への移動

于 2011-03-14T16:26:17.990 に答える