Квест → Как хакнуть форму
Прошли: 77
Когда вы пишете крупный проект на 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
(именованный посредник маршрута). Как-то так!
Вы можете заметить, что посредники в секции 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'); }); });
Вот и всё! Наслаждайтесь!