2016-02-27 13 views
15

sectionを使用していくつかのHTMLを定義し、次にyieldを他の場所に定義することができます。BladeのSectionとStackの違いは何ですか?

なぜスタックがあるのですか? https://laravel.com/docs/5.2/blade#stacks

これは、異なるキーワードでは全く同じことをしていますが、より少ないオプション(継承なし)を持っています。私は誤解される可能性があります

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

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

    @yield('scripts') 
</head> 

答えて

23

、その差はわずか意味的にではなく、行動でも:

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

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

    @stack('scripts') 
</head> 

は、セクションで行うことができます。スタックに必要に応じて(デフォルトでは)あなたの意見に一度@sectionのみを埋めるかもしれないが、あなたが、何度でも追加@pushで 。

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のスクリプトタグの下に追加されます。したがって、各ビューの特殊スクリプトをプッシュできます。

関連する問題