Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
Конечно же, не практично возвращать целые строки HTML напрямую из ваших маршрутов и контроллеров. К счастью, представления предоставляют удобный способ размещения всего нашего HTML в отдельных файлах.
Представления отделяют логику вашего контроллера / приложения от логики представления и хранятся в каталоге resources/views
. При использовании Laravel шаблоны представлений обычно написаны с использованием языка шаблонов Blade. Простое представление может выглядеть примерно так:
<!-- View stored in 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']);});
Примечание Ищете больше информации о том, как писать шаблоны Blade? Ознакомьтесь с полной документацией по Blade, чтобы начать работу.
Вместо того чтобы писать свои шаблоны фронтенда на PHP через Blade, многие разработчики предпочитают писать их, используя React или Vue. Laravel облегчает этот процесс благодаря Inertia, библиотеке, которая упрощает связь вашего фронтенда React / Vue с вашим бэкендом Laravel без типичных сложностей создания SPA.
Наши стартовые комплекты Breeze и Jetstream starter kits предоставляют отличную отправную точку для вашего следующего приложения Laravel, работающего на Inertia. Кроме того, Laravel Bootcamp предоставляет полную демонстрацию создания приложения Laravel, работающего на Inertia, включая примеры в Vue и React.
Вы можете создать представление, разместив файл с расширением .blade.php
в каталоге resources/views
вашего приложения или используя команду 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.
Представления также могут быть вложены в подкаталоги каталога resources/views
. Для ссылки на вложенные представления можно использовать "точечную" запись. Например, если ваше представление хранится в resources/views/admin/profile.blade.php
, вы можете вернуть его из одного из маршрутов или контроллеров вашего приложения следующим образом:
return view('admin.profile', $data);
Внимание Имена каталогов представлений не должны содержать символ
.
.
С использованием метода first
фасада View
вы можете создать первое представление, существующее в данном массиве представлений. Это может быть полезно, если ваше приложение или пакет позволяет настраивать или перезаписывать представления:
use Illuminate\Support\Facades\View; return View::first(['custom.admin', 'admin'], $data);
Если вам нужно определить, существует ли представление, вы можете использовать фасад View
. Метод exists
вернет true
, если представление существует:
use Illuminate\Support\Facades\View; if (View::exists('emails.customer')) { // ...}
Как вы видели в предыдущих примерах, вы можете передавать массив данных в представления, чтобы сделать эти данные доступными в представлении:
return view('greetings', ['name' => 'Victoria']);
При передаче информации таким образом данные должны быть массивом с парами ключ / значение. После предоставления данных представлению, вы можете обращаться к каждому значению внутри вашего представления, используя ключи данных, например, <?php echo $name; ?>
.
Как альтернативу передаче полного массива данных в функцию помощника view
, вы можете использовать метод with
для добавления отдельных частей данных в представление. Метод with
возвращает экземпляр объекта представления, так что вы можете продолжать цепочку методов, прежде чем вернуть представление:
return view('greeting') ->with('name', 'Victoria') ->with('occupation', 'Astronaut');
Иногда вам может потребоваться обмениваться данными со всеми представлениями, которые рендерит ваше приложение. Вы можете сделать это, используя метод share
фасада View
. Обычно вызовы метода share
размещаются в методе boot
провайдера службы. Вы можете добавить их в класс App\Providers\AppServiceProvider
или создать отдельный провайдер службы для этого:
<?php namespace App\Providers; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider{ /** * Зарегистрируйте любые службы приложения. */ public function register(): void { // ... } /** * Инициализируйте любые службы приложения. */ public function boot(): void { View::share('key', 'value'); }}
Композеры представлений - это обратные вызовы или методы класса, которые вызываются при рендеринге представления. Если у вас есть данные, которые вы хотите привязать к представлению каждый раз, когда это представление рендерится, композер представлений может помочь вам организовать эту логику в одном месте. Композеры представлений могут быть особенно полезны, если одно и то же представление возвращается несколькими маршрутами или контроллерами в вашем приложении и всегда требуется определенная часть данных.
Обычно композеры представлений регистрируются в одном из провайдеров служб вашего приложения. В этом примере предполагается, что мы создали новый App\Providers\ViewServiceProvider
для размещения этой логики.
Мы будем использовать метод composer
фасада View
для регистрации композера представлений. Laravel не включает в себя каталог по умолчанию для композеров представлений на основе классов, поэтому вы можете организовать их так, как вам удобно. Например, вы можете создать каталог app/View/Composers
, чтобы разместить все композеры представлений вашего приложения:
<?php namespace App\Providers; use App\View\Composers\ProfileComposer;use Illuminate\Support\Facades;use Illuminate\Support\ServiceProvider;use Illuminate\View\View; class ViewServiceProvider extends ServiceProvider{ /** * Зарегистрируйте любые службы приложения. */ public function register(): void { // ... } /** * Инициализируйте любые службы приложения. */ public function boot(): void { // Использование композеров на основе классов... Facades\View::composer('profile', ProfileComposer::class); // Использование композеров на основе замыканий... Facades\View::composer('welcome', function (View $view) { // ... }); Facades\View::composer('dashboard', function (View $view) { // ... }); }}
Внимание Помните, если вы создаете новый провайдер услуг для регистрации вашего композитора представлений, вам нужно добавить провайдер услуг в массив
providers
в конфигурационном файлеconfig/app.php
.
Теперь, когда мы зарегистрировали композер, метод compose
класса App\View\Composers\ProfileComposer
будет выполняться каждый раз, когда рендерится представление profile
. Давайте рассмотрим пример класса композера:
<?php namespace App\View\Composers; use App\Repositories\UserRepository;use Illuminate\View\View; class ProfileComposer{ /** * Создайте нового композера профиля. */ public function __construct( protected UserRepository $users, ) {} /** * Привяжите данные к представлению. */ public function compose(View $view): void { $view->with('count', $this->users->count()); }}
Как видите, все композеры представлений разрешаются с использованием контейнера служб, поэтому вы можете указать зависимости в конструкторе композера.
Вы можете присоединить композер представления к нескольким представлениям сразу, передав массив представлений в качестве первого аргумента методу composer
:
use App\Views\Composers\MultiComposer;use Illuminate\Support\Facades\View; View::composer( ['profile', 'dashboard'], MultiComposer::class);
Метод composer
также принимает символ *
в качестве метасимвола, позволяя привязать композер ко всем представлениям:
use Illuminate\Support\Facades;use Illuminate\View\View; Facades\View::composer('*', function (View $view) { // ...});
Представления "creators" очень похожи на композеры представлений; однако они выполняются сразу после создания представления, а не ожидая, пока представление собирается. Чтобы зарегистрировать представление "creator", используйте метод creator
:
use App\View\Creators\ProfileCreator;use Illuminate\Support\Facades\View; View::creator('profile', ProfileCreator::class);
По умолчанию представления Blade компилируются по мере необходимости. Когда выполняется запрос, рендерящий представление, Laravel определит, существует ли скомпилированная версия представления. Если файл существует, Laravel затем определит, был ли нескомпилированный вид изменен более недавно, чем скомпилированный вид. Если скомпилированное представление не существует или нескомпилированный вид был изменен, Laravel перекомпилирует представление.
Компиляция представлений во время запроса может иметь небольшое негативное влияние на производительность, поэтому Laravel предоставляет команду Artisan view:cache
для предварительной компиляции всех представлений, используемых вашим приложением. Для повышения производительности вы можете запускать эту команду в рамках вашего процесса развертывания:
php artisan view:cache
Вы можете использовать команду view:clear
для очистки кэша представлений:
php artisan view:clear