Laravel: @stack і @push, @yield і @section
Glossary overview

Laravel: @stack і @push, @yield і @section

@stack і @push — механізм Blade, який дозволяє дочірнім шаблонам вставляти контент у батьківський layout у заздалегідь визначені слоти.

Як це працює

У файлі layouts/app.blade.php оголошуємо слоти, у які зможуть «пушитись» дані з дочірніх шаблонів:

<head>
    @stack('styles')   {{-- сюди дочірні шаблони зможуть додавати CSS --}}
</head>
<body>
    @yield('content')
    @stack('scripts')  {{-- сюди — скрипти --}}
</body>

У дочірньому шаблоні пушимо контент у відповідний слот:

@push('styles')
    <link rel="stylesheet" href="/my-page.css">
@endpush

@section('content')
    ...
@endsection

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

Різниця від @section

  • @section — замінює блок (один на сторінку).
  • @stack — накопичує контент: кілька @push у різних місцях усі додадуться до одного стеку.

Реальний приклад з нашого проєкту

У файлі single.blade.php:

@push('scripts')
<script>
    // contact view tracking JS
</script>
@endpush

І в layouts/app.blade.php:

@stack('scripts')

Коли це корисно

  • Підключати CSS/JS тільки на конкретних сторінках.
  • Різні partial’и можуть додавати свої стилі незалежно один від одного.
  • Уникнути завантаження всього JS/CSS глобально на кожній сторінці.