3

動的に作成する必要があるメニューがあります (一部のブログ ページはデータベースから追​​加されます)。Zend\Navigation\Navigation を使用した ZF2 Dynamic Menuは、個々のコントローラー/アクションに対してこれを行う方法を説明しています。

しかし、モジュールの初期化の時点で、すべてのリクエストに対してこれをどのように行うべきでしょうか?

少なくとも routeMatch オブジェクト (言語パラメーターを取得するため) が必要であり、それを取得するために以下を見てきました。

    public function onBootstrap(EventInterface $e) 
    { 
        $app = $e->getApplication(); 
        $em  = $app->getEventManager(); 

        $em->attach(MvcEvent::EVENT_ROUTE, function($e) { 
            $routeMatch = $e->getRouteMatch();
        }); 
    }

しかし、ドキュメントには次のように書かれています。

「onBootstrap() メソッドは、この機能を実装するすべてのモジュール、すべてのページ要求で呼び出され、イベント リスナーの登録などの軽量タスクの実行にのみ使用する必要があります。」

Zend Framework 2 で動的ナビゲーション (またはその他のより複雑なロジック) を初期化するのに最適な場所と方法は何ですか?

4

1 に答える 1

1

正しい場所は、この種のことを行うためのブートストラップです。ブートストラップのコードはすべてのリクエストで実行されることに注意してください。そのため、可能な限り軽量にしてください。ナビゲーションを注入したい場合は、データベースからナビゲーション構造をキャッシュし、キャッシュからバージョンを注入してみてください。

この動作は、私がensembleで行ったものです。データベースからデータをフェッチしてルートを動的に構築し、ルートに基づいてナビゲーション構造が構築されます。ルートとナビゲーションはそれぞれルーターとナビゲーション コンテナに挿入されるため、アプリケーションのディスパッチ時には、module.config.php で構成されたルートを使用した「通常の」リクエストと何も変わらないように見えます。

いくつかの例については、kernelを確認してください。現在、Doctrine アダプター (Zend\Db は近日公開予定) でのみ利用できます。リスナーを登録して早期に接続し、データベースの結果をルートとナビゲーション構造に解析し、それらをキャッシュしてパフォーマンスを向上させることができます。

より具体的な情報が必要な場合は、質問を更新して、全体像で見逃しているものについて詳しく尋ねてください。

于 2013-01-21T13:33:17.770 に答える