Laravel: Blade і компоненти
20 питань · ~20 хв · Версія v3.0
Увійдіть, щоб продовжити
Виведення й екранування, директиви й цикли, стеки й включення, компоненти зі слотами й атрибутами, власні директиви, фрагменти й Vite - питання всіх рівнів, від junior до lead.
- За спробу
- 20
- У пулі
- 46
- Проходжень
- 0
- Середній бал
- -
- Пройшли на 70%+
- -
Питання для підготовки
11 питаньBlade - це вбудований шаблонізатор Laravel. Шаблони мають розширення .blade.php, лежать у resources/views і компілюються у звичайний PHP-код, який кешується, - тож у рантаймі оверхеду майже немає. На відміну від чистого PHP, Blade дає лаконічний синтаксис і автоматичне екранування.
Основні можливості:
{{-- Вивід зі змінних (екранується автоматично) --}}
<h1>{{ $post->title }}</h1>
{{-- Директиви замість PHP-конструкцій --}}
@if ($user)
Вітаємо, {{ $user->name }}
@endif
@foreach ($posts as $post)
<li>{{ $post->title }}</li>
@endforeach
{{ $value }}- екранує вивід (захист від XSS);{!! $html !!}виводить «сирий» HTML без екранування.- Директиви:
@if,@foreach,@forelse,@auth,@can,@csrf,@vite. - Наслідування шаблонів через
@extends/@section/@yield- спільний layout без дублювання. - Компоненти
<x-alert />- багаторазові елементи UI зі слотами та props.
Навіщо: чистіший і безпечніший за вкладений PHP, з повторним використанням розмітки.
У сучасному Laravel ассети збирає Vite. У шаблоні підключають директивою @vite:
@vite(['resources/css/app.css', 'resources/js/app.js'])
Під час розробки (npm run dev) Vite віддає файли з hot-reload; на продакшені (npm run build) - зібрані файли з хешами в імені для cache busting.
Для статичних файлів із public/ використовують хелпер asset('images/logo.png').
View Composer прив'язує дані до шаблону щоразу, коли той рендериться - щоб не дублювати передачу спільних даних у багатьох контролерах.
View::composer('partials.sidebar', function ($view) {
$view->with('categories', Category::all());
});
Тепер будь-яке відображення partials.sidebar автоматично отримає $categories. Зручно для меню, лічильників, віджетів у layout. Реєструється у boot() сервіс-провайдера.
Базовий layout оголошує «дірки» через @yield, дочірні шаблони їх заповнюють:
{{-- layouts/app.blade.php --}}
<html><body>
<main>@yield('content')</main>
</body></html>
{{-- posts/show.blade.php --}}
@extends('layouts.app')
@section('content')
<h1>{{ $post->title }}</h1>
@endsection
Навіщо: загальна розмітка (шапка, футер, підключення ассетів) описується один раз. Альтернатива - Blade-компоненти (<x-layout> зі слотами), які в нових проєктах часто витісняють @extends.
Blade-компоненти - багаторазові елементи UI, які підключаються тегом:
<x-alert type="error" :message="$error" />
Бувають:
- Анонімні - лише файл
resources/views/components/alert.blade.php. - Класові -
php artisan make:component Alert, з PHP-класом для логіки.
Дані передаються атрибутами, контент - через слоти:
{{-- components/card.blade.php --}}
<div class="card">
<h2>{{ $title }}</h2>
{{ $slot }}
</div>
Чистіше за @include, бо мають явний інтерфейс (props) та інкапсуляцію.
Спершу почитати
Прочитати - ще не значить знати
20 питань, по одному на екран, ~20 хв. Після завершення - розбір кожної помилки з посиланням на питання.