2014-03-05 5 views
0

좀 더 제한적인 자바 배경에서 온 것일 수도 있지만 Laravel의보기와 컨트롤러 간의 연결이 오류가 발생하기 쉽습니다. 예를 들어,이보기가 laravel의 변수에 따라 달라집니다.

ReceiptController extends BaseController { 
    ... 
    public function show() { 
     $data = array($receipt, $offer); 
     View::make('registration', $data); 
    } 
} 

같은 컨트롤러 찾고 뭔가 영수증 객체에 의존하는보기 및 제안 문자열 컨트롤러가 어딘가에 제공하는 문자열을 포함하지 않는 경우는 어떻게

... 
<div id="receipt"> 
    <h1>Receipt</h1> 
    {{$receipt->items}} 
    @if ($receipt->price > 10000) 
     <p>{{$offer}}</p> 
    @endif; 
</div> 
... 

을 고려? 최악의 시나리오는 누군가가 10000을 넘는 가격으로 뭔가를 살 때까지 눈에 띄지 않을 수도 있습니다. 컨트롤러가보기를 만드는 데 필요한 모든 변수를 컨트롤러가 통과시키지 않으면 어떻게해야합니까? PHPStorm과 같은 IDE가 변수를 인식하게 만드는 경우 보너스.

답변

1

당신은 사용할 수 있습니다 a view composer이며 영수증보기가 호출 될 때마다 항상 제안이 포함되도록하십시오. 그렇게하면 객체가 항상 전달된다는 것을 알 수 있습니다.

View::composer('receipt', function($view) 
{ 
    $view->with('offer', Offer::get(1)); 
}); 

아니면 그냥

<div id="receipt"> 
    <h1>Receipt</h1> 
    {{$receipt->items}} 
    @if ($receipt->price > 10000) 
     <p>{{$offer or 'Sorry - no special available'}}</p> 
    @endif; 
</div> 

마지막으로보기에 직접 처리 할 수 ​​- '최고'옵션은 항상 test your code하고,보기를 확인은 항상 $의 서비스 변수로 호출

+0

그것은 조금 불만족 스럽지만, 당신이 제안한대로 그것을 다루는 것이 최선의 방법이라고 생각합니다. 이 일을 어떻게 생각하니? throw new Exception ("이보기에 의존하는 모든 데이터가 설정되지 않았습니다.); } –

+0

예쁘네요. 보기에서 예외를 throw 할 수는 없습니다. 너무 늦었습니다 (방금 시도해 보았고 예외를 표시 할 수 없었습니다). – Laurence

+0

왜 안 되니? 성공적으로 시도했습니다. –

0

가격이 값보다 높으면 제어기에서 작동하도록 의도 된 그런 종류의 논리는 $ var = false를 설정하고보기에 있는지 확인하십시오.

if($receipt->price > 10000) { 
    $offer = $offer; 
} else { 
    $offer = false; 
} 

그리고 PHPStorm 및 블레이드 템플릿 엔진, PHPStorm 7.1 사이의 호환성에 대한

는 지원하지 않습니다,하지만 당신은 더 나은 세상이 다음 버전 그것을 위해 투표를 구축하는 데 도움이 : http://youtrack.jetbrains.com/issue/WI-14172

+0

보기에서 확인하는 것 이상의 이유는 앱을 모듈화하고 읽을 수있게 만드는 것입니다. 나는이 문제에 대해 투표를했는데, 그것이 내가 비판적이라고 생각하는 것은 아니다. –

관련 문제