web-dev-qa-db-ja.com

Bladeのセクションとスタックの違いは何ですか?

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
Webinan

私は間違っているかもしれませんが、違いは意味的にだけでなく、行動にもあります。 @ Push you appendスタックに必要な回数だけ、(デフォルトでは)@ section only onceビューで。状況によっては、テンプレートファイル全体またはループ内の異なる場所からコンテンツを追加する必要がある場合に便利です。

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>
35
macghriogair

スタックは何らかの形でスクリプトに適切であり、スタックを必要なだけ追加できます。

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

追加…

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

@stack('scripts')
</head>

ご覧のとおり、スクリプトスタックはexample.jsのscriptタグの下に追加されます。したがって、ビューごとに特別なスクリプトをプッシュできます。

5
Hos Mercury