Шаблоны Blade
Blade — шаблонизатор Laravel. Шаблон — это HTML-файл с простыми вставками для вывода данных, условий и циклов. Шаблоны лежат в папке resources/views и имеют расширение .blade.php.
Вывод шаблона
Функция view() находит шаблон по имени и возвращает готовую страницу. Имя welcome соответствует файлу resources/views/welcome.blade.php:
Route::get('/', function () {
return view('welcome');
});Передача данных
Данные передают вторым аргументом — массивом. Ключи становятся переменными шаблона:
public function show()
{
return view('profile', ['name' => 'Анна', 'age' => 28]);
}<h1>{{ $name }}</h1>
<p>Возраст: {{ $age }}</p>Двойные фигурные скобки выводят значение и экранируют HTML — это защищает от XSS.
Условия
Директивы начинаются со знака @:
@if ($age >= 18)
<p>Доступ открыт</p>
@else
<p>Доступ закрыт</p>
@endifЦиклы
<ul>
@foreach ($posts as $post)
<li>{{ $post->title }}</li>
@endforeach
</ul>Для пустых списков удобна директива @forelse:
@forelse ($posts as $post)
<li>{{ $post->title }}</li>
@empty
<p>Статей пока нет.</p>
@endforelseОбщий макет
Шапку и подвал выносят в макет. Место для содержимого страницы отмечают директивой @yield:
{{-- resources/views/layout.blade.php --}}
<html>
<body>
<header>Мой блог</header>
<main>@yield('content')</main>
</body>
</html>Страница наследует макет и заполняет секцию:
@extends('layout')
@section('content')
<h1>Главная</h1>
@endsectionПодключение частей
Повторяющийся фрагмент выносят в отдельный файл и подключают директивой @include. Точка в имени заменяет слэш в пути:
@include('partials.menu')Частая ошибка
Запись {!! $text !!} выводит значение без экранирования. Если в переменной данные от пользователя, он сможет вставить на страницу свой скрипт.
{{-- Опасно для пользовательских данных: --}}
{!! $comment !!}
{{-- Безопасно: --}}
{{ $comment }}