@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 глобально на кожній сторінці.