Nous pouvons utiliser un section
pour définir du HTML puis yield
ailleurs.
Alors pourquoi avons-nous des piles? https://laravel.com/docs/5.2/blade#stacks
Il fait exactement la même chose avec différents mots clés, mais a moins d'options (pas d'héritage).
@Push('scripts')
<script src="/example.js"></script>
@endpush
<head>
<!-- Head Contents -->
@stack('scripts')
</head>
Peut être fait avec la section:
@section('scripts')
<script src="/example.js"></script>
@endsection
<head>
<!-- Head Contents -->
@yield('scripts')
</head>
Je me trompe peut-être, mais la différence n'est pas seulement sémantique, mais aussi dans le comportement. Avec @ Push vous ajoutez autant de fois que nécessaire à une pile, tandis que (par défaut) vous pouvez remplir @ section uniquement ne fois dans vos vues. Dans certaines situations, cela est utile lorsque vous devez ajouter du contenu à partir de différents emplacements dans vos fichiers de modèle ou en boucles:
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>
résultat:
<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>
La pile est en quelque sorte appropriée pour les scripts, avec la pile que vous pouvez ajouter autant que vous le souhaitez.
@Push('scripts')
<script src="/example.js"></script>
@endpush
Ajouter…
<head>
<!-- Head Contents -->
@stack('scripts')
</head>
Comme vous pouvez le voir, la pile de scripts sera ajoutée sous la balise script de example.js. Vous pouvez donc pousser des scripts spéciaux pour chaque vue.