PHP Profi

Middleware groups in Laravel 5.2 Перевод Серия 

php Laravel 5.2 middleware

Когда вы пишете крупный проект на Laravel`е, то ваш файл маршрутизации (routes.php) как правило, становится довольно большим. В первую очередь я группирую роуты на логически отдельные секции. Например "admin", "auth", "public".  Обычно каждая из этих групп получает свой собственный набор http-посредников (middleware) — "admin", например, получает auth. Конечно, группа маршрутов для API может использовать другой auth посредник (middleware), а он — использовать специфические для API ограничения или что-то еще.

В Laravel 5.2 появились группы http-посредников (middleware groups), которые являются по сути сокращением (алиасом) для применения большей группы посредников, используя только её ключ.

Примечание: даже если вы не хотите использовать "алиасы" групп, вам стоит продолжить читать, так как это крупное изменение глобального стека http-посредников.

Помните вышеупомянутый пример с admin? Теперь мы можем создать группу посредников "admin". Давайте узнаем как.

Создание групп

Вы можете задать группы посредников (middleware groups) в вашем app\Http\Kernel.php файле. Там есть новое свойство с именем $middlewareGroups. Это массив, каждый ключ которого является именем, а каждое значение — соответствующим посредником (middleware).

Из коробки он поставляется с web и api:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

Как видите, ключи могут ссылаться либо на класс, либо на специфичное для маршрута сокращение, такое как throttle или auth.

Давайте создадим группу admin:

protected $middlewareGroups = [
    'web' => [...],
    'api' => [...],
    'admin' => [
        'web',
        'auth',
    ]
];

Мы определили, что admin — группа, которая использует web (другую группу) и auth (именованный посредник маршрута). Как-то так!

Различия с 5.1

Вы можете заметить, что посредники в секции web такие же, как и те, которые применялись к каждому маршруту в Laravel 5.1 и младше. Это достаточно значительное нововведение, поэтому, пожалуйста, примите к сведению, что все маршруты, которые не будут иметь группу посредников web, не будут иметь куки или сессии или csrf функционала.

Также это означает, что у нас есть намного больше гибкости; однако мы можем иметь более независимые от состояния (прим. пер.: stateless — в данном случае не хранит состояние в куках или сессии) API, чего не дают нам инструменты куки и сессии.

Мы можем избавиться от наиболее универсального посредника: если вы посмотрите, единственный универсальный посредник в 5.2 — это "проверка на режим обслуживания (maintenance mode)".

Следует также отметить, что любой API, который опирается на cookie или сессию (или CSRF) не будет работать, если он расположен в секции api. Так что если у вас зависимый от состояния API, вам нужно внести некоторые изменения в группу api, а не использовать её дефолтную настройку.

Использование групп

Итак, мы знаем, как определить группу посредников. Как нам ее использовать?

Это будет ясно, когда вы посмотрите в дефолтный routes.php в 5.2:

Route::get('/', function () {
    return view('welcome');
});


Route::group(['middleware' => ['web']], function () {
    //
});

Как видите, использовать её просто, как и любой посредник маршрута, например, auth: просто вставьте ключ группы как непосредственное значение middleware, или как массив нескольких ключей и посредников. Итак, вот наша группа посредников admin в применении:

Route::group(['middleware' => 'admin'], function () {
    Route::get('dashboard', function () {
        return view('dashboard');
    });
});

Вот и всё! Наслаждайтесь!

2016-01-13 alek13 Поделиться: оригинал