Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
Laravel Folio - мощный маршрутизатор на основе страниц, разработанный для упрощения маршрутизации в приложениях Laravel. С Laravel Folio создание маршрута становится таким же простым, как создание шаблона Blade в каталоге resources/views/pages
вашего приложения.
Например, чтобы создать страницу, доступную по URL /greeting
, просто создайте файл greeting.blade.php
в каталоге resources/views/pages
вашего приложения:
<div> Hello World</div>
Для начала установите Folio в свой проект с использованием менеджера пакетов Composer:
composer require laravel/folio
После установки Folio вы можете выполнить команду Artisan folio:install
, которая установит служебный провайдер Folio в вашем приложении. Этот служебный провайдер регистрирует каталог, в котором Folio будет искать маршруты / страницы:
php artisan folio:install
По умолчанию Folio обслуживает страницы из каталога resources/views/pages
вашего приложения, но вы можете настроить эти каталоги в методе boot
вашего служебного провайдера Folio.
Например, иногда удобно указать несколько путей Folio в одном и том же приложении Laravel. Вам может потребоваться иметь отдельный каталог страниц Folio для "административного" раздела вашего приложения, используя другой каталог для остальных страниц вашего приложения.
Это можно сделать с использованием методов Folio::path
и Folio::uri
. Метод path
регистрирует каталог, который Folio будет сканировать для страниц при маршрутизации входящих HTTP-запросов, в то время как метод uri
указывает "базовый URI" для этого каталога страниц:
use Laravel\Folio\Folio; Folio::path(resource_path('views/pages/guest'))->uri('/'); Folio::path(resource_path('views/pages/admin')) ->uri('/admin') ->middleware([ '*' => [ 'auth', 'verified', // ... ], ]);
Вы также можете маршрутизировать страницы на основе поддомена входящего запроса. Например, вы можете маршрутизировать запросы с admin.example.com
в другой каталог страниц, чем остальные страницы вашего Folio. Вы можете сделать это, вызвав метод domain
после вызова метода Folio::path
:
use Laravel\Folio\Folio; Folio::domain('admin.example.com') ->path(resource_path('views/pages/admin'));
Метод domain
также позволяет вам захватывать части домена или поддомена в качестве параметров. Эти параметры будут внедрены в ваш шаблон страницы:
use Laravel\Folio\Folio; Folio::domain('{account}.example.com') ->path(resource_path('views/pages/admin'));
Вы можете создать маршрут Folio, разместив шаблон Blade в любом из ваших подключенных каталогов Folio. По умолчанию Folio подключает каталог resources/views/pages
, но вы можете настроить эти каталоги в методе boot
служебного провайдера Folio.
После того как шаблон Blade размещен в подключенном каталоге Folio, вы можете сразу получить к нему доступ через браузер. Например, страница, размещенная в pages/schedule.blade.php
, может быть доступна в вашем браузере по адресу http://example.com/schedule
.
Чтобы быстро просмотреть список всех страниц / маршрутов вашего Folio, вы можете вызвать команду Artisan folio:list
:
php artisan folio:list
Вы можете создать вложенный маршрут, создав один или несколько каталогов в одном из каталогов Folio. Например, чтобы создать страницу, доступную по /user/profile
, создайте шаблон profile.blade.php
в каталоге pages/user
:
php artisan make:folio user/profile # pages/user/profile.blade.php → /user/profile
Иногда вам может потребоваться сделать определенную страницу "индексной" для каталога. Разместив шаблон index.blade.php
в каталоге Folio, любые запросы к корню этого каталога будут направлены на эту страницу:
php artisan make:folio index# pages/index.blade.php → / php artisan make:folio users/index# pages/users/index.blade.php → /users
Часто вам нужно вставлять сегменты URL входящего запроса в вашу страницу, чтобы вы могли с ними взаимодействовать. Например, вам может потребоваться получить доступ к "ID" пользователя, чей профиль отображается. Для этого вы можете заключить сегмент имени файла страницы в квадратные скобки:
php artisan make:folio "users/[id]" # pages/users/[id].blade.php → /users/1
Захваченные сегменты можно получить как переменные в вашем шаблоне Blade:
<div> User {{ $id }}</div>
Для захвата нескольких сегментов вы можете предварить захваченный сегмент тремя точками ...
:
php artisan make:folio "users/[...ids]" # pages/users/[...ids].blade.php → /users/1/2/3
При захвате нескольких сегментов захваченные сегменты будут вставлены в страницу как массив:
<ul> @foreach ($ids as $id) <li>User {{ $id }}</li> @endforeach</ul>
Если подстановочный сегмент имени файла вашего шаблона соответствует одной из моделей Eloquent вашего приложения, Folio автоматически воспользуется возможностями привязки модели маршрута Laravel и попытается вставить разрешенный экземпляр модели в вашу страницу:
php artisan make:folio "users/[User]" # pages/users/[User].blade.php → /users/1
Захваченные модели можно получить как переменные в вашем шаблоне Blade. Имя переменной модели будет преобразовано в "camel case":
<div> User {{ $user->id }}</div>
Иногда вы можете захотеть разрешить связанные модели Eloquent, используя столбец отличный от id
. Для этого вы можете указать столбец в имени файла страницы. Например, страница с именем файла [Post:slug].blade.php
будет пытаться разрешить связанную модель через столбец slug
вместо столбца id
.
На Windows вы должны использовать -
для разделения имени модели от ключа: [Post-slug].blade.php
.
По умолчанию Folio будет искать вашу модель в каталоге app/Models
вашего приложения. Однако при необходимости вы можете указать полностью квалифицированное имя класса модели в имени файла вашего шаблона:
php artisan make:folio "users/[.App.Models.User]" # pages/users/[.App.Models.User].blade.php → /users/1
По умолчанию модели, которые были мягко удалены, не извлекаются при разрешении неявных привязок моделей. Однако, если вы хотите, вы можете указать Folio извлекать мягко удаленные модели, вызвав функцию withTrashed
в шаблоне страницы:
<?php use function Laravel\Folio\{withTrashed}; withTrashed(); ?> <div> User {{ $user->id }}</div>
По умолчанию Folio вернет содержимое шаблона Blade страницы в качестве ответа на входящий запрос. Однако вы можете настроить ответ, вызвав функцию render
в шаблоне страницы.
Функция render
принимает замыкание, которое будет получать экземпляр View
, который рендерится Folio, позволяя вам добавлять дополнительные данные к представлению или настраивать весь ответ. Помимо экземпляра View
, замыканию render
также будут предоставлены любые дополнительные параметры маршрута или привязки модели:
<?php use App\Models\Post;use Illuminate\Support\Facades\Auth;use Illuminate\View\View; use function Laravel\Folio\render; render(function (View $view, Post $post) { if (! Auth::user()->can('view', $post)) { return response('Unauthorized', 403); } return $view->with('photos', $post->author->photos);}); ?> <div> {{ $post->content }}</div> <div> This author has also taken {{ count($photos) }} photos.</div>
Вы можете указать имя для маршрута данной страницы, используя функцию name
:
<?php use function Laravel\Folio\name; name('users.index');
Как и именованные маршруты в Laravel, вы можете использовать функцию route
для создания URL-адресов страниц Folio, которые были назначены именем:
<a href="{{ route('users.index') }}"> All Users</a>
Если у страницы есть параметры, вы можете просто передать их значения функции route
:
route('users.show', ['user' => $user]);
Вы можете применить промежуточный слой к определенной странице, вызвав функцию middleware
в шаблоне страницы:
<?php use function Laravel\Folio\{middleware}; middleware(['auth', 'verified']); ?> <div> Dashboard</div>
Или, чтобы назначить промежуточные слои группе страниц, вы можете применить метод middleware
после вызова метода Folio::path
.
Чтобы указать, к каким страницам следует применять промежуточный слой, массив промежуточных слоев может быть проиндексирован с использованием соответствующих шаблонов URL страниц, к которым они должны быть применены. Символ *
может использоваться в качестве символа подстановки:
use Laravel\Folio\Folio; Folio::path(resource_path('views/pages'))->middleware([ 'admin/*' => [ 'auth', 'verified', // ... ],]);
Вы можете включать замыкания в массив промежуточных слоев, чтобы определить встроенные, анонимные промежуточные слои:
use Closure;use Illuminate\Http\Request;use Laravel\Folio\Folio; Folio::path(resource_path('views/pages'))->middleware([ 'admin/*' => [ 'auth', 'verified', function (Request $request, Closure $next) { // ... return $next($request); }, ],]);
При использовании Folio всегда старайтесь использовать возможности кеширования маршрутов Laravel. Folio отслеживает команду Artisan route:cache
, чтобы убедиться, что определения страниц и имена маршрутов Folio правильно кешируются для достижения максимальной производительности.