1

さて、私はDoctrine2.2.3でZendFramework1.12を使用しています。クラスはZend_Navigation単純すぎて静的であるため、独自のナビゲーションクラスを実装しています。

シナリオは次のとおりです。

私のアプリケーションでは、ナビゲーションメニューを標準(必須)アイテム(「ホーム」、「会社概要」など)とユーザー固有のアイテム(ユーザーの役割に応じて)で作成する必要があります。動的メニュー項目はデータベース(MySQL)に保存され、私はDoctrineをORMおよびDBALとして使用しています。

独自のナビゲーションクラスとそのコンテンツをレンダリングするための部分ビューを作成しようとしています。その際、すべてのアクション呼び出しでデータベースにクエリを実行し、メニュー項目を送り返すと、パフォーマンスの問題が発生する可能性があります。ページに?キャッシングを実装するための最良の方法は何でしょうか?メニュークラスの保存に使用し始めましZend_Registry_Namespaceた(このクラスには、現在アクティブなメニュー項目も保存されます。これは、部分ビューでCSSスタイルを項目に追加するために使用します)。

助けてください

4

1 に答える 1

1

したがって、ユーザーが独自のメニュー構造とコンテンツを作成できるCMSを開発しているわけではありません。その場合、メニュー情報をリレーショナルデータベースに保存しないでください。データベースからデータをクエリすることは、PHPアレイまたは構成ファイルから同じ情報を読み取るだけの場合と比較して、常に多くのオーバーヘッドを伴います。セッションにも何も保存する必要はありません。実際、それは本当に単純なケースです。ユーザーにログインさせ、ユーザーのユーザーグループ/特権を決定し、プログラムでメニューをつなぎ合わせます。

さまざまなメニューパーツを事前に準備してから、配列をマージして、最終的な配列をnavレンダラーに送信することができます。

例:

誰もが手に入る標準メニュー:

$navArray = array(
    array(
        'controller' => 'index',
        'label' => 'Home',
    ),
    array(
        'controller' => 'about',
        'label' => 'About',

    )
);

次に、ACLの役割に応じてエントリを追加します。

if ($user->getRole() == 'administrator')
{
    $navArray[] = array(
        'controller' => 'tools',
        'label' => 'Tools'
    );
}
于 2012-10-10T09:39:59.397 に答える