2016-09-20 1 views
0

私は、動的にメニュー項目を管理laravelでフォームを実装しようとしている、と私はこの偉大なパッケージが見つかりました:(パフォーマンスの観点で)、ミドルウェアを使用してLaravelの各要求でデータベースからオブジェクトをロード

lavary/laravel-menu

私は、アプリケーションのすべてのルートにミドルウェアを適用し、そのミドルウェアで、シリアル化された/ JSONedオブジェクトをデータベースからロードし、このサンプルコードをガイドラインとして使用します。メニューをロードして、すべてのアプリケーションページで使用できるようにします。

Menu::make('MyNavBar', function($menu){ 

    $menu->add('Home'); 
    $menu->add('About', 'about'); 
    $menu->add('services', 'services'); 
    $menu->add('Contact', 'contact'); 

}); 

さらに、パフォーマンスを向上させるためにDBから来るメニューオブジェクトをキャッシュすることを考えています。

これを実行するより良い方法はありますか? (すべての観点、特にパフォーマンスから)。

ありがとうございました。

+1

そして、その後、これを処理するためのモデルオブザーバーとキャッシュを使用し、ミドルウェアより..etc(優れたメニュー項目を処理するために、View Composerを使用するウルマスターレイアウトに部分的なメニューが含まれ、これは単に一般的な考え方である –

+0

@AchrafKhouadja 次に、ビュー・コンポーザーを使用すると、メニュー・オブジェクトがメニュー・テンプレートがロードされたときにのみ使用可能になることを意味しますか? モデルオブザーバは、メニューが更新されたときにのみキャッシュを変更します。これはパフォーマンスを向上させますか? しかし、キャッシュ/ DBからメニューオブジェクトはどこにロードされますか? –

+1

メニューオブジェクトはあなたが選択したアノテーションで利用できるようになります。コンポーザーのドキュメントとexemplesを確認してください(iaビットのビジー状態からコードを提供することはできません) '$ value = Cache :: remember( 'users'、60、function(){ここでロジックを入れてください return $ menu_object; });この方法では、キャッシュから取得できる場合はキャッシュから取得し、そうでない場合はクエリを実行して60分キャッシュし、永久にキャッシュしてモデルオブザーバを実装します –

答えて

1

メニューオブジェクト

menu.blade.php

を含む新しいビューを作成しますが、すべての内部のメニューを含める(使用したい表示またはマスター・レイアウト・ファイル内のあなたが使用する場合そのすべてのビューで)

master.blade.php(または何でもあなたはそれ/または他のビューを呼び出す内側)

@include('menu') 

は、View Composerの(私はあなたがどのように知っていると仮定)

を設定し、その

 public function boot() 
{ 
    view()->composer(['menu'], function ($view) { 
     //you can do it for multiple view 
     $menu = Cache::remember('MyNavBar', 60, function() { 
      return Menu::make('MyNavBar', function ($menu) { 
       $menu->add('Home'); 
       $menu->add('About', 'about'); 
       $menu->add('services', 'services'); 
       $menu->add('Contact', 'contact'); 
      }); 
     }); 
     $view->with('menu', $menu); 
    }); 
} 

これは、メニューパーシャルとメニューloadesを行いますし、それがない場合には、キャッシュから取得されますようにそれを行いますキャッシュに存在しない場合、データベースからロードされ、60分キャッシュされます(これはofcを変更することができます)。

これはあなたに一般的な考えを与えるためのものです。私はこれがあなたを助けることを願っています。

MORE ABOUT VIEW COMPOSERS

+0

ありがとう! しかし、ビューの作成者ではないモデルオブザーバにキャッシングセクションを追加する必要があります。または両方で? –

+1

それはプロジェクトに依存しています、私は知らない、この答えはあなたに良い結果を与えるでしょうが、それは自分自身の答えが60分ごとに影響を受ける、自分自身の答えの問題、モデルオブザーバーを使用することができますか、メニューコンテンツ 'Cache :: forget( 'MyNavBar');を更新する関数にこれを追加します。 –