2013-08-31 3 views
4

온라인 저장소를 구축하기 위해 Laravel을 사용해야하는지 여부를 논의하고 있습니다.Laravel 4 구현 방법 부분 뷰 - 데이터를 부분 뷰로 바인딩

요구 사항 - 메인 영역에 제품 목록이있는 사이드 바에 장바구니를 표시하십시오. 데이터를 부분 뷰에 바인딩해야합니다.

부분보기를 표시하기 위해 PartialController을 만들었습니다.

class PartialController extends BaseController { 

    public function showCartSummary() 
    { 
     $cartItems = Cart::all(); 
     return View::make('partials.cartsummary', array(
      'cart' => $cartItems, 
     )); 
    } 

    public function showProducts() 
    { 
     $products = Products::all(); 
     return View::make('partials.products', array(
      'products' => $products, 
     )); 
    } 
} 

나는 문제는 데이터가 이러한 뷰에 전달되지 않는 것을 부분 뷰에

Shop.Index.Blade.php

@extends('master') 

@section('content') 
    @include('partials.cart') 
@stop 

@section('side1') 
    @include('partials.products') 
@stop 

당겨 게 인덱스보기를 작성한 partials.cart 및 partials.products는 자체 컨트롤러에서 호출되지 않기 때문입니다.

제 해결 방법은 ShopController 내의 데이터베이스를 쿼리하고 shop.index보기로 전달하는 것입니다.

ShopController.php

나는 또한 ShopController 물론

public function showIndex() 
    { 
     $cartItems = Cart::all(); 
     $products = Product::all(); 

     return View::make('shop.index', array(
      'cartItems' => $cartItems, 
      'products' => $products 
     )); 
    } 

을 만들었습니다, 지금 DB 쿼리를 반복하고 나는 모든 컨트롤러에서 동일한 쿼리를 반복하고 싶지 않아 메소드가 여러 개 사용됩니다.

가장 좋은 방법은 무엇입니까?

NB :이 질문의 목적으로 단순화 된 데이터베이스 호출을 사용했습니다. & 코드에 하나 또는 두 개의 오타/구문 오류가있을 수 있지만이 질문에는 중요하지 않습니다.

반복이

: 내가 viewmodels/발표자를 만들 view composers을 사용할 수있는 것으로 나타났습니다

. 다음 filters.php

App::before(function($request) 
{ 
    View::composer('partials.products', 'ProductComposer'); 
    View::composer('partials.cartitems', 'CartComposer'); 
}); 

class ProductComposer { 
    public function compose($view) 
    { 
     $view->with('products', Product::all()); 
    } 
} 

class CartComposer { 
    public function compose($view) 
    { 
     $view->with('cartitems', Cart::all());  
    } 
} 
filters.php를 수정, 는 먼저 I는 PartialController.php 도랑 : 지금

shop.blade.php

@extends('master') 
@section('content') 
    @include('partials.products') 
@stop 
@section('side1') 
    @include('partials.cartitems') 
@stop 

는 일부 전망에 데이터를 전달할

이것은 여전히 ​​매우 혼란 스럽습니다. 필자의 모든 부분적인 견해를 filters.php 파일에 담고 싶지는 않습니다 ...이 작업을 수행하는 적절한/공식적인 방법이 있습니까? 어떤예요?

+0

을 iteration2가 올바른지 할 수 있습니다. 이 클래스들을 자신의 파일로 만들고 네임 스페이스에 포함시킬 수 있습니다. 그것은 더 깨끗할 것입니다. – itachi

+0

왜 당신은 (삐걱 거리는) 장바구니를 재발 명하고 싶습니까? 재미있는 물건들을 가지고 다닐 수 있도록 충분한 무료 테스트를 거친 옵션이 있습니다. – Mawg

답변

4

app/start/global.php를 통해 app/디렉토리에 composers.php 파일을 포함시킵니다. 이 파일에서 View :: composer 호출을 수행합니다 (이전에는이를 App :: before에 넣지 않아도됩니다).

작곡가 클래스를 새로운 app/composers/디렉토리로 이동하고 composer.json의 자동 로더에 디렉토리를 추가하십시오.

이외에도 작곡가의 사용법은 정확합니다.

0

날 추상 클래스 ShopController을 만들 에 대한

와 생성자 BaseController

() 쓰기보기 :: 작곡가

를 확장하고 있습니다 ('제품') DB :: 테이블을 사용할 수 있습니다 - (기억> 100) -> get(); 캐시

-1

에 대한 모든() 대 당신은 단순히

@include('partials.products', array('data'=>'here')) 
관련 문제