3.7. Представления
- 1. Введение
- 2. Создание и рендеринг представлений
- 3. Передача данных в представления
- View Composers
- Optimizing Views
1. Введение
Конечно, нецелесообразно возвращать целые строки HTML-документов напрямую из маршрутов и контроллеров. К счастью, представления предоставляют удобный способ размещения всего нашего HTML в отдельных файлах.
Представления отделяют логику вашего контроллера / приложения от логики отображения и хранятся в каталоге resources/views. При использовании Laravel шаблоны представлений обычно пишутся с использованием языка шаблонов Blade. Простое представление может выглядеть следующим образом:
<!-- Представление, сохраненное в resources/views/greeting.blade.php --> <html> <body> <h1>Hello, {{ $name }}</h1> </body></html>
Поскольку это представление хранится в resources/views/greeting.blade.php
, мы можем вернуть его,
используя глобальный хелпер view
, следующим образом:
Route::get('/', function () { return view('greeting', ['name' => 'James']);});
1.1. Написание представлений в React / Vue
Вместо того чтобы писать frontend-шаблоны на PHP с помощью Blade, многие разработчики начинают предпочитать писать их, используя React или Vue. Laravel делает это простым благодаря библиотеке Inertia, которая позволяет легко связать frontend на React / Vue с backend на Laravel, избегая типичных сложностей при создании SPA.
Наши стартовые наборы Breeze и Jetstream предоставляют отличную отправную точку для вашего следующего приложения на Laravel, работающего на Inertia. Кроме того, Laravel Bootcamp предлагает полную демонстрацию создания приложения на Laravel с использованием Inertia, включая примеры на Vue и React.
2. Создание и рендеринг представлений
Вы можете создать представление (view) двумя способами:
- Создание вручную:
Поместите файл с расширением
.blade.php
в директориюresources/views
вашего приложения. Название файла станет именем представления, которое вы сможете использовать в коде. - Создание с помощью Artisan-команды:
Используйте Artisan-команду
make:view
для создания представления:php artisan make:view greeting
Расширение .blade.php
сообщает фреймворку, что файл содержит Blade-шаблон. Blade-шаблоны содержат HTML, а также Blade-директивы, которые
позволяют легко выводить значения, создавать условия "if", перебирать данные и многое другое.
Создав представление, вы можете вернуть его из одного из маршрутов или контроллеров вашего приложения, используя
view
(глобальный хелпер):
Route::get('/', function () { return view('greeting', ['name' => 'James']);});
Представления также могут быть возвращены с использованием фасада View
:
use Illuminate\Support\Facades\View; return View::make('greeting', ['name' => 'James']);
Как видно, первый аргумент, передаваемый в хелпер view
, соответствует имени файла представления в
директории resources/views
. Вторым аргументом является массив данных, которые должны быть доступны в
представлении. В данном случае мы передаем переменную name
, которая отображается в представлении с
использованием Blade-синтаксиса.
2.1. Вложенные директории представлений
Представления также можно располагать в поддиректориях resources/views
. Для обращения к вложенным
представлениям можно использовать "точечную" нотацию ( указывая путь к файлу с помощью точек ). Например, если
ваше
представление хранится по пути
resources/views/admin/profile.blade.php
, вы можете возвращать его в одном из маршрутов /
контроллеров
вашего приложения следующим образом:
return view('admin.profile', $data);
Символ .
не должен использоваться в названиях директорий для представлений.
2.2. Создание первого доступного представления
С помощью метода first
фасада View
вы можете создать первое представление, которое
существует в заданном массиве представлений. Это может быть полезно, если ваше приложение или пакет позволяет
настраивать или переопределять представления:
use Illuminate\Support\Facades\View; return View::first(['custom.admin', 'admin'], $data);
2.3. Проверка существования представления
Если вам нужно проверить, существует ли представление, вы можете использовать фасад View
. Метод
exists
вернет true
, если представление существует:
use Illuminate\Support\Facades\View; if (View::exists('admin.profile')) { // ...}
3. Передача данных в представления
Как показано в предыдущих примерах, вы можете передать массив данных в представления, чтобы эти данные стали доступны в них:
return view('greetings', ['name' => 'Victoria']);
При передаче данных таким образом они должны быть представлены в виде массива с парами ключ / значение. После
передачи данных в представление вы можете получить доступ к каждому значению, используя ключи данных, например,
<?php echo $name; ?>
.
Вместо передачи полного массива данных в функцию-хелпер view
вы можете использовать метод
with
для добавления отдельных элементов данных в представление. Метод with
возвращает
экземпляр объекта представления, что позволяет продолжить цепочку вызовов методов перед возвратом представления:
return view('greeting') ->with('name', 'Victoria') ->with('occupation', 'Astronaut');