2016-02-27 71 views
15

我們可以使用section來定義一些HTML,然後yield在別的地方。刀片和刀片之間有什麼區別?

那麼,爲什麼我們有堆棧? https://laravel.com/docs/5.2/blade#stacks

它使用不同的關鍵字完成同樣的事情,但有更少的選項(沒有繼承)。

@push('scripts') 
    <script src="/example.js"></script> 
@endpush 

<head> 
    <!-- Head Contents --> 

    @stack('scripts') 
</head> 

可與部分來完成:

@section('scripts') 
    <script src="/example.js"></script> 
@endsection 

<head> 
    <!-- Head Contents --> 

    @yield('scripts') 
</head> 

回答

23

我也可能錯了,但不同的是,不僅語義,但在行爲上也是如此。 隨着@push追加多次需要一個堆棧,而(默認),你可能在你的意見填寫@section一次。 在某些情況下,這種就派上用場了,當你需要從不同的地點在您的模板文件或在循環中添加內容:

index.blade.php:

@extends('master') 

... 

@for ($i = 0; $i < 3; $i++) 

    @push('test-push') 
    <script type="text/javascript"> 
    // Push {{ $i }} 
    </script> 
    @endpush 

    @section('test-section') 
    <script type="text/javascript"> 
    // Section {{ $i }} 
    </script> 
    @endsection 

@endfor 

master.blade.php

@stack('test-push') 
    @yield('test-section') 
</body> 

結果:

<script type="text/javascript"> 
    // Push 0 
    </script> 
     <script type="text/javascript"> 
    // Push 1 
    </script> 
     <script type="text/javascript"> 
    // Push 2 
    </script> 
    <script type="text/javascript"> 
    // Section 0 
    </script> 
    </body> 
+2

'@ section @ append'怎麼樣?我相信他們有同樣的行爲。 – Fortael

2

堆棧是某種方式適當的F或腳本,隨着堆棧,你可以追加儘可能多的,你需要的。

@push('scripts') 
    <script src="/example.js"></script> 
@endpush 

追加...

<head> 
<!-- Head Contents --> 

@stack('scripts') 
</head> 

正如你可以看到腳本棧example.js的腳本標籤下將追加。所以你可以爲每個視圖推送特殊的腳本。