2015-02-04 2 views
3

저는 Laravel로 시작했으며 운동으로 빠른 블로그 사이트를 구성 할 것입니다.Laravel에서 모델을 전세계 레이아웃에서 사용할 수있게 만들기

콘텐츠가있는 게시물이있는 모델이 있습니다. 게시물을 나열하고 단일 게시물을 표시하고 게시물을 만들 수 있습니다.

게시물 (카테고리에 속하는 게시물)과 관련된 카테고리 테이블과 모델을 만들었습니다. 전체 탐색기 레이아웃의 전체 카테고리를 나열하는 드롭 다운 메뉴를 나열하고 싶습니다.

보기가 전체 앱에서 해당 데이터에 액세스하도록 허용하는 가장 좋은 방법은 무엇입니까? 데이터를 전달할 수 있도록 각 컨트롤러 메서드에 다음을 추가해야하는 것은 잘못되었습니다.

$categories = Category::all(); 

고마워요!

답변

5

그게 바로 View Composers입니다. 당신이 app/start/global.php의 말을 app/filters.php이 코드를 삽입하거나 새 app/composers.php를 만들고 포함 할 수

View::composer('layout', function($view){ 
    $view->with('categories', Category::all()); 
}); 

:

당신은 매번 특정 뷰가 렌더링 호출되는 콜백 함수를 등록 할 수 있습니다

require app_path().'/composers.php'; 
+0

매우 유용합니다. app/filters.php에 추가했습니다. 작곡가가 모범 사례일까요? 캐시에 대해 더 자세히 알아야 할 필요가있을 것입니다. 그래서 내 페이지가 히트 될 때마다 동일한 쿼리를 작성하지 않을 것입니다! 고맙습니다. – Rapture

+0

예 가장 좋은 방법이라고 생각합니다. 또한 Laravel에는 매우 간단한 [쿼리에 대한 캐싱 기능] (http://laravel.com/docs/4.2/queries#caching-queries)이 있습니다. 'Category :: remember (10) -> get()'을 수행하면 쿼리가 10 분 동안 캐시됩니다. – lukasgeiter

4

Laravel 5가 오늘 발표되었습니다. 그래서 이것은 당신이 새로운 Laravel에서 그것을 할 수있는 방법입니다. 이렇게하려면 View Composer [docs]을 사용하고 싶습니다.

// App/Providers/ComposerServiceProvider.php 
<?php namespace App\Providers; 

use View; 
use Illuminate\Support\ServiceProvider; 

class ComposerServiceProvider extends ServiceProvider { 

    /** 
    * Register bindings in the container. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // Using class based composers... 
     View::composer('posts.*', 'App\Http\ViewComposers\PostComposer'); 
    } 

} 

// App/Http/Composers/PostComposer.php 
<?php namespace App\Http\Composers; 

use Illuminate\Contracts\View\View; 

class PostComposer { 

    /** 
    * Bind data to the view. 
    * 
    * @param View $view 
    * @return void 
    */ 
    public function compose(View $view) 
    { 
     $view->with('categories', Categories::all()); 
    } 

} 
+0

저는 Laravel 5에 대해 매우 흥분하고 있습니다. Express.js와 Node의 특성을 따르는 것 같습니다. – Rafael

+0

보기 작곡가는 Laravel 4에서와 마찬가지로 Laravel 5에서 여전히 동일한 방식으로 작동합니다. 유일한 차이점은 이제는 서비스 제공 업체의 부팅 방법에 등록하는 것이 가장 좋습니다. – lukasgeiter

관련 문제