2016-02-27 23 views
15

Possiamo usare un section per definire un codice HTML e quindi yield altrove.Qual è la differenza tra Section e Stack in Blade?

Quindi perché abbiamo stack? https://laravel.com/docs/5.2/blade#stacks

Sta facendo esattamente la stessa cosa con parole chiave diverse, ma ha meno opzioni (Nessuna ereditarietà).

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

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

    @stack('scripts') 
</head> 

può essere fatto con la sezione:

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

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

    @yield('scripts') 
</head> 

risposta

23

potrei sbagliarmi, ma la differenza non è solo semanticamente, ma nel comportamento pure. Con @push si accodare il numero di volte necessario per uno stack, mentre (per impostazione predefinita) è possibile compilare @section solo volta nel vostro punto di vista. In alcune situazioni questo è utile quando è necessario aggiungere contenuti provenienti da diverse località del file di template o in loop:

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> 

risultato:

<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

Che dire di '@ sezione @ append'? Credo che abbiano lo stesso comportamento. – Fortael

2

Stack è in qualche modo appropriata f o script, con lo stack puoi aggiungere tanto quanto ti serve.

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

Append ...

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

@stack('scripts') 
</head> 

Come si può vedere gli script impilano verrà aggiunto sotto il tag script di example.js. Quindi puoi inserire script speciali per ogni vista.

Problemi correlati