Laravel (5,7) Промежуточное ПО
Вступление
Middleware предоставляет удобный механизм фильтрации HTTP-запросов, поступающих в ваше приложение. Например, Laravel включает промежуточное программное обеспечение, которое проверяет подлинность пользователя вашего приложения. Если пользователь не аутентифицирован, промежуточное программное обеспечение перенаправит пользователя на экран входа в систему. Однако, если пользователь аутентифицирован, промежуточное программное обеспечение позволит запросу продолжить работу в приложении.
Создание Middleware
Благодаря ремесленнику создание промежуточного программного обеспечения в Laravel легко. Все, что нам нужно сделать, это открыть терминал в корне проекта и выполнить следующую команду.
// Replace <MiddlewareName> with the actual name of the middleware.
php artisan make:middleware <MiddlewareName>
Эта команда создает наш класс промежуточного программного обеспечения в app / Http / Middleware. Создать собственное промежуточное программное обеспечение (которое мы будем называть DoingSomething, мы можем).
php artisan make:middleware DoingSomething
Теперь мы можем открыть наш класс промежуточного программного обеспечения и добавить нашу логику в промежуточное программное обеспечение. Помните, что наше промежуточное ПО поддерживает режим обслуживания сайта. Сначала нужно импортировать исключение HttpException. В верхней части файла мы можем сделать это, используя SymfonyComponentHttpKernelExceptionHttpException; В методе handle нашего промежуточного программного обеспечения мы можем просто сделать это.
public function handle($request, Closure $next)
{
throw new HttpException(503);
}
Вызывая это исключение, Laravel знает, как загрузить файл 503.blade.php. Это должно содержать сообщение для режима обслуживания.
Регистрация промежуточного программного обеспечения
Теперь, когда мы создали промежуточное программное обеспечение, мы должны сообщить приложению, что промежуточное программное обеспечение существует. Если вы хотите, чтобы промежуточное программное обеспечение запускалось при каждом запросе, перейдите в app / Http / kernel.php и добавьте FQN промежуточного программного обеспечения в свойство $ middleware класса ядра.
protected $middleware = [
...
\App\Http\Middleware\DoingSomething::class
];
Делая это, пользователь увидит сообщение для каждой страницы, которую он посещает.
Если вы хотите, чтобы промежуточное ПО срабатывало на некоторых маршрутах, мы можем назвать промежуточное ПО и использовать его в качестве справочного механизма для добавления его в некоторые маршруты. Чтобы назвать промежуточное программное обеспечение, оставаясь в файле app / Http / kernel.php, добавьте свойство keyed в массив $ routeMiddleware. Ключ массива - это имя промежуточного программного обеспечения, а значение должно быть полным FQN промежуточного программного обеспечения.
protected $routeMiddleware = [
...
'doing.something' => \App\Http\Middleware\DoingSomething::class,
...
];
Присоединение промежуточного программного обеспечения к маршруту
Возьмите этот маршрут, например,
Route::get('posts/{something}', '[email protected]');
метод getPost в классе PostController срабатывает, когда URL-адрес соответствует posts / {что-то}.
Мы могли бы добавить наше промежуточное программное обеспечение down.for.maintenance, изменив второй параметр Route :: get в массив, который содержит свойство промежуточного программного обеспечения и замыкание, которое обрабатывает маршрут.
Route::get('posts/{something}', ['middleware' => 'grown.ups.only', function () {
return "Only big boys/girls can see this.";
}]);
При этом только маршруты, соответствующие сообщениям / {что-то}, покажут, что что-то делает с ошибкой.
Еще одно добавление промежуточного программного обеспечения к маршрутам - вызов метода промежуточного программного обеспечения для определения маршрута. Как это.
Route::get('posts/{something}', function () {
//
})->middleware(['first', 'second']);
Параметры промежуточного программного обеспечения
Передача параметров в промежуточное ПО довольно проста. Скажем, например, наше промежуточное ПО проверяет роль пользователя, прежде чем разрешить доступ к странице. Мы также могли бы передать список разрешенных ролей промежуточному программному обеспечению.
Чтобы передать параметр в наше промежуточное ПО, после параметров $ request и Closure мы добавляем наши переменные.
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
Чтобы передать переменную, при подключении нашего промежуточного программного обеспечения к маршрутам мы делаем это.
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
Группирование промежуточного программного обеспечения
Иногда может быть несколько промежуточных программ, которые вы применяете для нескольких маршрутов. Было бы лучше, если бы мы могли объединить или сгруппировать промежуточное ПО. Это позволяет нам повторно использовать эту группу промежуточного программного обеспечения.
Чтобы сгруппировать промежуточное ПО, мы добавляем свойство $ middlewareGroups (если оно не существует) в класс Kernel. Это свойство принимает массив пар ключ-значение. Ключ представляет имя группы, а значение представляет собой массив FQN промежуточного программного обеспечения. По умолчанию Laravel предоставляет сеть и группу 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',
'auth:api',
],
];
If we need to use this group in our application, we can then do this.
Route::group(['middleware' => ['web']], function () {
//
});
Отложенный ответ Middlewares
Делая это, мы сначала запускаем наше промежуточное ПО, затем выполняем наше действие и возвращаем ответ.
public function handle($request, Closure $next)
{
$response = $next($request);
/**
* Perform actions here
*/
return $response;
}
Предыдущая: Laravel (5.7) Маршрутизация
Далее: Laravel (5.7) CSRF Защита
Новый контент: Composer: менеджер зависимостей для PHP , R программирования