Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Шаблоны 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 }}

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.