2015-10-01 48 views
0

使用Laravel時,如何根據視圖中是否定義了特定剖面來修改佈局?我知道我可以有一些默認的文本顯示,如果部分不存在,但是想象一下以下情形:檢查視圖中是否定義了剖面

<div class="row"> 
    <div class="col-sm-9"> 
     @yield('content') 
    </div> 
    <div class="col-sm-3"> 
     @section('sidebar') 
     @show 
    </div> 
</div> 

所以,如果我的觀點定義@section「側邊欄」,這個偉大的工程。但是如果視圖沒有定義側邊欄,我不希望我的主要內容欄是col-sm-9,我希望它是col-sm-12。我希望我能做這樣的事情:

@if(@section('sidebar')) 
    <div class="row"> 
     <div class="col-sm-9"> 
      @yield('content') 
     </div> 
     <div class="col-sm-3"> 
      @section('sidebar') 
      @show 
     </div> 
    </div> 
@else 
    <div class="row"> 
     <div class="col-sm-12"> 
      @yield('content') 
     </div> 
    </div> 
@endif 

但是,這似乎並不奏效。任何人都可以提出替代方案

謝謝!

回答

4

您可以使用它來判斷一個部分被定義或沒有:

@if (!empty($__env->yieldContent('sidebar'))) 
    //It is defined 
@endif 

$__env->yieldContent()如果沒有定義或爲空返回指定部分的內容,或空字符串。

編輯

此前PHP 5.5 empty()不會對函數的結果直接工作,所以你可以使用trim()代替,就像這樣:

@if (trim($__env->yieldContent('sidebar'))) 
    //It is defined 
@endif 
+0

當我嘗試這個,我得到的錯誤「錯誤:在寫情況下無法使用方法的返回值」 – Lannar

+0

@Lannar我已經更新了我的答案 – Drown

+0

這奏效了,謝謝! – Lannar

5

Laravel 5.2增加了一個@hasSection指令這正是你所要求的。 由於某些原因,在5.3或5.4文檔中沒有提及。

@hasSection('title') 
    <title>@yield('title') - {{ config('app.name') }}</title> 
@else 
    <title>{{ config('app.name') }}</title> 
@endif 
相關問題