Документация 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 в шаблоне страницы:
<?phpuse function Laravel\Folio\{withTrashed};withTrashed();?><div> User {{ $user->id }}</div>
По умолчанию Folio вернет содержимое шаблона Blade страницы в качестве ответа на входящий запрос. Однако вы можете настроить ответ, вызвав функцию render в шаблоне страницы.
Функция render принимает замыкание, которое будет получать экземпляр View, который рендерится Folio, позволяя вам добавлять дополнительные данные к представлению или настраивать весь ответ. Помимо экземпляра View, замыканию render также будут предоставлены любые дополнительные параметры маршрута или привязки модели:
<?phpuse 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:
<?phpuse 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 в шаблоне страницы:
<?phpuse 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 правильно кешируются для достижения максимальной производительности.