2014-08-28 5 views

답변

1

이 간단 할 수있는 어려운 일이다 컨트롤러 때문에 HTTP 요청 처리기입니다. 따라서 다른 요청을하지 않는 한 뷰 내부에서 컨트롤러 메서드를 호출해서는 안되며이 방법으로 사용하기위한 것이 아니기 때문에 컨트롤러 메서드를 호출하는 것이 어렵습니다.

컨트롤러는 요청을 받고 데이터 프로세서 (저장소, 클래스)를 호출하고 결과 데이터를 가져 와서보기로 보내고보기 결과를 얻어서 브라우저로 다시 보내야합니다. 컨트롤러는 거의 아무것도 모르고 다른 것을하지 않습니다.

보기는 데이터를 받아서 플롯해야합니다. 많은 데이터와 많은 양의 문제는 없지만 데이터를 받아야합니다 (객체는 좋음).

@include('products.partials.table') 

그리고 당신 : 당신이 매김 페이지 매김, 검색, 필터 등이있는 뷰를 플롯해야하는 경우

, 당신은 당신이 하위 뷰로 추가 할 수 있습니다, 그것을 할 수있는 컨트롤러 호출을 필요로하지 않습니다 모든 뷰에서 해당 뷰 부분을 재사용 할 수 있습니다. 해당 테이블 만 때로는 표시해야하는 경우가 여기에 조건을 추가 할 수 있습니다

@if ($showTable) 
    @include('products.partials.table') 
@endif 

그 부분의 데이터가 필요한 경우 생산이 컨트롤러의 데이터 :

<?php 

class ProductsController extends BaseController { 

    public function index() 
    { 
     $allProducts = $this->productRepository->all(); 

     $filteredProducts = $this->productRepository->filter(Input::all()); 

     $categories = $this->categoriesRepository->all(); 

     return View::make('products.index') 
       ->with('products', compact('allProducts', 'filteredProducts', 'categories')) 
    } 

} 

하지만, 아직 덜 컨트롤러는 비즈니스, 더 나은에 대해 알고, 그래서 당신은 다만 수 :

<?php 

class ProductsController extends BaseController { 

    public function index() 
    { 
     $products = $this->dataRepository->getProductsFiltered(Input::only('filter')); 

     return View::make('products.index') 
       ->with('products', compact('products')) 
    } 

} 

을 그리고 저장소에 데이터를 플롯 데 필요한 필요한 정보를 생성 할 수 있습니다.

관련 문제