Laravel Folio

Вступ

Laravel Folio - це потужний маршрутизатор на основі сторінок, призначений для спрощення маршрутизації в Laravel застосунках. З Laravel Folio створення маршруту стає таким же легким, як створення Blade шаблону в директорії resources/views/pages вашого застосунку.

Наприклад, щоб створити сторінку, яка буде доступна за URL-адресою /greeting, просто створіть файл greeting.blade.php у директорії resources/views/pages вашого застосунку:

<div>
    Hello World
</div>

Встановлення

Щоб розпочати, встановіть Folio у ваш проект, використовуючи менеджер пакетів компонувальник:

composer require laravel/folio

Після встановлення Folio, ви можете виконати команду Artisan folio:install, яка встановить сервіс-провайдер Folio у ваш застосунок. Цей сервіс-провайдер реєструє каталог, де Folio буде шукати маршрути / сторінки:

php artisan folio:install

Шляхи сторінок / URI

За замовчуванням 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 folio:page user/profile
 
# pages/user/profile.blade.php → /user/profile

Маршрути індексу

Іноді ви можете захотіти зробити певну сторінку "індексом" каталогу. Розмістивши шаблон index.blade.php у каталозі Folio, будь-які запити до кореня цього каталогу будуть спрямовані на цю сторінку:

php artisan folio:page index
# pages/index.blade.php → /
 
php artisan folio:page users/index
# pages/users/index.blade.php → /users

Параметри Маршруту

Часто вам потрібно, щоб сегменти URL вхідного запиту були вставлені у вашу сторінку, щоб ви могли взаємодіяти з ними. Наприклад, вам може знадобитися доступ до "ID" користувача, чий профіль відображається. Щоб досягти цього, ви можете інкапсулювати сегмент імені файлу сторінки в квадратні дужки:

php artisan folio:page "users/[id]"
 
# pages/users/[id].blade.php → /users/1

Захоплені сегменти можуть бути доступні як змінні у вашому Blade шаблоні:

<div>
    User {{ $id }}
</div>

Щоб захопити кілька сегментів, ви можете додати префікс до інкапсульованого сегмента з трьома крапками ...:

php artisan folio:page "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 folio:page "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 folio:page "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>

Хуки рендерингу (Render Hooks)

За замовчуванням 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

Ви можете застосувати middleware до конкретної сторінки, викликавши функцію middleware у шаблоні сторінки:

<?php
 
use function Laravel\Folio\{middleware};
 
middleware(['auth', 'verified']);
 
?>
 
<div>
    Dashboard
</div>

Або, щоб призначити middleware для групи сторінок, ви можете зв'язати метод middleware після виклику методу Folio::path.

Щоб вказати, до яких сторінок слід застосовувати middleware, масив middleware може бути ключовим, використовуючи відповідні шаблони URL сторінок, до яких вони повинні бути застосовані. Символ * може використовуватися як символ-джокер:

use Laravel\Folio\Folio;
 
Folio::path(resource_path('views/pages'))->middleware([
    'admin/*' => [
        'auth',
        'verified',
 
        // ...
    ],
]);

Ви можете включити замикання в масив middleware, щоб визначити вбудоване, анонімне middleware:

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 та імен маршрутів для максимальної продуктивності.