0

Zend Framework2 で Zend_Navigation を使用するための最良の方法は何でしょうか。現時点では、ヘッダーとフッター メニューの構成を追加しようとしています。両方のメニューが自動的に読み込まれます。しかし、私は多くの問題に遭遇しました:

a) デフォルト メニューの最適な場所は、できれば Application-Module です。

b) module.config.php のルートに以下を追加しました。

'view_helpers' => array(
    'helper_map' => array(
            'navigation' => 'Application\View\Helper\Navigation'
    ),
),

私の Navigation.php は ./module/Application/src/Application/View/Helper/Navigation.php にあります

含まれるもの:

class Navigation extends AbstractContainer {
    public function __construct($menu = null) {
        var_dump($menu);
    }
}

クラスが間違っている可能性があることはわかっています。しかし、現時点では、ZF2にクラスをロードすることさえできませんでした。なにが問題ですか ?

4

1 に答える 1

1

beta5を使用していると仮定すると、viewhelperの構成が間違っているだけです。正しく行う方法については、この投稿を参照してください。

ナビゲーションの使用方法について:servicemanagerでサービスを作成しnavigation、ナビゲーションを新しいconfig-keyに配置します。

return array(
    'navigation' => array(
        // your navigation config goes here
    ),
    'servicemanager' => array(
        'factories' => array(
            'navigation' => function($sm) {
                $config = $sm->get('Configuration');
                $navigation = new \Zend\Navigation\Navigation($config->get('navigation'));
                return $navigation;
            }
        ),
    ),
    'view_helpers' => array(
        'factories' => array(
            'navigation' => function($sm) {
                return new \My\View\Helper\Navigation($sm->get('navigation'));
            }
        ),
    ),
);

(ナビゲーションクラス名についてはよくわかりません。まだ調べていません。)

これは3つのことを行います:

  • navigationzendのナビゲーションの場合、実際のインスタンスを指すというサービスを提供します
  • ビューヘルパーを提供し、ナビゲーションのインスタンスへの参照を渡します
  • navigationナビゲーション構成を含む新しいトップレベルキーを作成します。他のモジュールは、セットアップを変更せずに、ここにカスタムナビゲーションを追加できます。

たとえば、コントローラーでは、を呼び出してナビゲーションインスタンスをコードフェッチします

$this->getServiceLocator()->get('navigation');

ビュー内で、ヘルパーはコンストラクターによってナビゲーションにアクセスできます。

Navigation extends // ...
{
    public function __construct($navigation)
    {
        // do anything you want
    }
}

他のモジュールは、同じキーに書き込むことでナビゲーションにエントリを追加できます。

return array(
    'navigation' => array(
        // further navigation entries
    ),
);

初期ロジックをどこに配置するか(たとえば、サービス/ビューヘルパーの設定)はあなた次第です。このために、1行のコードで無効にできる独自のモジュールを作成することをお勧めします(その結果、ナビゲーションが表示されなくなります)。しかし、デフォルトのモジュールもおそらく良い場所です。最終的には、構成をコードと混合する代わりに、ナビゲーションおよびビューヘルパー用に独自のファクトリクラスを作成できます。

免責事項:コードは単なるドラフトであり、テストされていません。

于 2012-07-09T20:55:51.063 に答える