2016-02-27 12 views
15

Wir können eine section verwenden, um etwas HTML und dann yield das woanders zu definieren.Was ist der Unterschied zwischen Sektion und Stack in Blade?

Warum haben wir also Stacks? https://laravel.com/docs/5.2/blade#stacks

Es macht genau dasselbe mit anderen Schlüsselwörtern, hat aber weniger Optionen (keine Vererbung).

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

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

    @stack('scripts') 
</head> 

kann mit dem Abschnitt erfolgen:

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

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

    @yield('scripts') 
</head> 

Antwort

23

ich falsch sein könnte, aber der Unterschied ist nicht nur semantisch, sondern auch im Verhalten. Mit @push Sie so oft anhängen wie auf einen Stapel benötigt, während (Standardeinstellung) Sie @section nur einmal in Ihren Ansichten füllen können. In einigen Situationen dies in praktisch, wenn Sie Inhalte aus verschiedenen Standorten in Ihren Template-Dateien oder in Schleifen hinzufügen müssen:

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> 

Ergebnis:

<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

Was ist mit '@ Abschnitt @ append'? Ich glaube, sie haben dasselbe Verhalten. – Fortael

2

Stack ist someway angemessen f oder Skripte, mit Stack können Sie so viel anhängen, wie Sie benötigen.

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

Anfügen ...

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

@stack('scripts') 
</head> 

Wie Sie die Skripte unter dem Skript-Tag von example.js angehängt wird sehen können stapeln. So können Sie für jede Ansicht spezielle Skripte pushen.

Verwandte Themen