Blade中的Section和Stack有什么区别?

时间:2016-02-27 16:48:54

标签: laravel templates blade

我们可以使用section来定义一些HTML,然后使用yield来定义其他HTML。

那我们为什么要堆叠呢? 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>

3 个答案:

答案 0 :(得分:33)

我可能错了,但差异不仅在语义上,而且在行为上也是如此。 使用 @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>

答案 1 :(得分:4)

Stack非常适合脚本,堆栈可以根据需要添加。

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

追加......

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

@stack('scripts')
</head>

如您所见,脚本堆栈将附加在example.js的脚本标记下。因此,您可以为每个视图推送特殊脚本。

答案 2 :(得分:1)

@section - You can add your js css once.
@stack   - Push js css into stack (page) many times.