Первый шаблон:
Все шаблоны живут в resources/views и заканчиваются на .blade.php. Создайте файл resources/views/articles/index.blade.php и отдайте его из контроллера:
Код: Выделить всё
// app/Http/Controllers/ArticleController.php
public function index()
{
$articles = [
['title' => 'Деплой Laravel на VPS за 500 рублей', 'views' => 1240],
['title' => 'Зачем нужен php artisan tinker', 'views' => 318],
];
return view('articles.index', ['articles' => $articles]);
}
Вывод данных и директивы:
Blade компилируется в обычный PHP, поэтому в шаблоне доступно всё, что вы передали. Конструкция {{ $var }} выводит значение и автоматически экранирует HTML через htmlspecialchars. Это защита от XSS, и отключать её без причины не нужно.
Код: Выделить всё
{{-- resources/views/articles/index.blade.php --}}
<h1>Статьи</h1>
@forelse ($articles as $article)
<article>
<h2>{{ $article['title'] }}</h2>
<p>Просмотров: {{ $article['views'] }}</p>
@if ($loop->first)
<span>Свежее</span>
@endif
</article>
@empty
<p>Статей пока нет.</p>
@endforelse
Если нужно вывести HTML как есть, существует {!! $html !!}. Используйте его только для данных, которым доверяете на сто процентов, например для разметки из вашей же админки после очистки.
Каркас страницы:
Копировать шапку и подвал в каждый шаблон глупо. Выносим общий каркас в resources/views/layouts/app.blade.php:
Код: Выделить всё
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>@yield('title', 'Мой блог')</title>
</head>
<body>
<header>меню</header>
<main>
@yield('content')
</main>
@include('partials.footer')
</body>
</html>
Код: Выделить всё
@extends('layouts.app')
@section('title', 'Статьи')
@section('content')
<h1>Статьи</h1>
@endsection
Типичные грабли:
Файл назван index.php вместо index.blade.php. Laravel такой шаблон найдёт, но директивы в нём работать не будут, на экран вылезет сырой @foreach.
Ошибка "View [articles.index] not found" почти всегда означает опечатку в имени или не ту папку. Проверяйте путь от resources/views, без расширения.
{!! !!} с пользовательским вводом. Любой комментарий с тегом script превратится в дырку на сайте. Правило простое: по умолчанию {{ }}, исключения только осознанно.
Если правите шаблон, а на сервере ничего не меняется, виноват кэш скомпилированных вью. Лечится командой php artisan view:clear.
И последнее: не тащите запросы к базе в шаблон. Все данные готовит контроллер, Blade только показывает. Это правило сэкономит вам часы отладки.
Итог:
Вы умеете отдавать шаблоны через view(), передавать данные, выводить их с экранированием, крутить циклы и собирать страницы из общего каркаса. В следующей главе займёмся миграциями и структурой базы, а в пятой заменим захардкоженные массивы статей на настоящие модели Eloquent.