Промежуточное программное обеспечение действует как мост между запросом и ответом. Это тип фильтрующего механизма. В этой главе описывается механизм промежуточного программного обеспечения в Laravel.
Laravel включает промежуточное программное обеспечение, которое проверяет, аутентифицирован ли пользователь приложения или нет. Если пользователь аутентифицирован, он перенаправляет на домашнюю страницу, в противном случае, если он не перенаправляет на страницу входа.
Промежуточное программное обеспечение можно создать, выполнив следующую команду:
php artisan make:middleware <middleware-name>
Замените <middleware-name> на имя вашего промежуточного программного обеспечения. Промежуточное программное обеспечение, которое вы создаете, можно увидеть в каталоге app / Http / Middleware .
пример
Обратите внимание на следующий пример, чтобы понять механизм промежуточного программного обеспечения —
Шаг 1 — Давайте теперь создадим AgeMiddleware. Чтобы создать это, нам нужно выполнить следующую команду —
php artisan make:middleware AgeMiddleware
Шаг 2 — После успешного выполнения команды вы получите следующий вывод —
Шаг 3 — AgeMiddleware будет создан в приложении / Http / Middleware . Вновь созданный файл будет иметь следующий код, уже созданный для вас.
<?php namespace App\Http\Middleware; use Closure; class AgeMiddleware { public function handle($request, Closure $next) { return $next($request); } }
Регистрация Middleware
Мы должны зарегистрировать каждое промежуточное программное обеспечение перед его использованием. В Laravel есть два типа Middleware.
- Global Middleware
- Маршрутное промежуточное ПО
Глобальное промежуточное программное обеспечение будет выполняться при каждом HTTP-запросе приложения, тогда как промежуточное программное обеспечение маршрута будет назначено определенному маршруту. Промежуточное программное обеспечение может быть зарегистрировано в app / Http / Kernel.php. Этот файл содержит два свойства $ middleware и $ routeMiddleware . Свойство $ middleware используется для регистрации Global Middleware, а свойство $ routeMiddleware используется для регистрации промежуточного программного обеспечения для конкретного маршрута.
Чтобы зарегистрировать глобальное промежуточное программное обеспечение, перечислите класс в конце свойства $ middleware.
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \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, ];
Чтобы зарегистрировать промежуточное ПО для конкретного маршрута, добавьте ключ и значение в свойство $ routeMiddleware.
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ];
пример
Мы создали AgeMiddleware в предыдущем примере. Теперь мы можем зарегистрировать его в свойстве промежуточного программного обеспечения для конкретного маршрута. Код для этой регистрации показан ниже.
Ниже приведен код для приложения / Http / Kernel.php —
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \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, ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'Age' => \App\Http\Middleware\AgeMiddleware::class, ]; }
Параметры промежуточного программного обеспечения
Мы также можем передавать параметры с помощью Middleware. Например, если ваше приложение имеет разные роли, такие как пользователь, администратор, супер-администратор и т. Д., И вы хотите аутентифицировать действие на основе роли, это может быть достигнуто путем передачи параметров с помощью промежуточного программного обеспечения. Промежуточное программное обеспечение, которое мы создаем, содержит следующую функцию, и мы можем передать наш пользовательский аргумент после аргумента $ next .
public function handle($request, Closure $next) { return $next($request); }
пример
Шаг 1. Создайте RoleMiddleware, выполнив следующую команду:
php artisan make:middleware RoleMiddleware
Шаг 2 — После успешного выполнения вы получите следующий вывод —
Шаг 3. Добавьте следующий код в метод handle недавно созданного приложения RoleMiddlewareat / Http / Middleware / RoleMiddleware.php.
<?php namespace App\Http\Middleware; use Closure; class RoleMiddleware { public function handle($request, Closure $next, $role) { echo "Role: ".$role; return $next($request); } }
Шаг 4 — Зарегистрируйте RoleMiddleware в файле app \ Http \ Kernel.php . Добавьте строку, выделенную серым цветом в этом файле, чтобы зарегистрировать RoleMiddleware.
Шаг 5 — Выполните следующую команду для создания TestController —
php artisan make:controller TestController --plain
Шаг 6 — После успешного выполнения вышеуказанного шага вы получите следующий вывод —
Шаг 7 — Скопируйте следующие строки кода в файл app / Http / TestController.php .
приложение / Http / TestController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class TestController extends Controller { public function index() { echo "<br>Test Controller."; } }
Шаг 8 — Добавьте следующую строку кода в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('role',[ 'middleware' => 'Role:editor', 'uses' => 'TestController@index', ]);
Шаг 9 — Посетите следующий URL, чтобы протестировать промежуточное программное обеспечение с параметрами
http://localhost:8000/role
Шаг 10 — Вывод будет выглядеть, как показано на следующем рисунке.
Завершаемое промежуточное ПО
Прерываемое промежуточное ПО выполняет некоторую задачу после отправки ответа в браузер. Это может быть достигнуто путем создания промежуточного программного обеспечения с методом завершения в промежуточном программном обеспечении. Прерываемое промежуточное программное обеспечение должно быть зарегистрировано в глобальном промежуточном программном обеспечении. Метод terminate получит два аргумента $ request и $ response. Метод Terminate может быть создан, как показано в следующем коде.
пример
Шаг 1 — Создайте TerminateMiddleware , выполнив следующую команду.
php artisan make:middleware TerminateMiddleware
Шаг 2 — Приведенный выше шаг даст следующий результат —
Шаг 3. Скопируйте следующий код в только что созданный TerminateMiddleware в app / Http / Middleware / TerminateMiddleware.php.
<?php namespace App\Http\Middleware; use Closure; class TerminateMiddleware { public function handle($request, Closure $next) { echo "Executing statements of handle method of TerminateMiddleware."; return $next($request); } public function terminate($request, $response) { echo "<br>Executing statements of terminate method of TerminateMiddleware."; } }
Шаг 4 — Зарегистрируйте TerminateMiddleware в файле app \ Http \ Kernel.php . Добавьте строку, выделенную серым цветом в этом файле, чтобы зарегистрировать TerminateMiddleware.
Шаг 5 — Выполните следующую команду, чтобы создать ABCController .
php artisan make:controller ABCController --plain
Шаг 6 — После успешного выполнения URL вы получите следующий вывод —
Шаг 7 — Скопируйте следующий код в файл app / Http / ABCController.php .
приложение / Http / ABCController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ABCController extends Controller { public function index() { echo "<br>ABC Controller."; } }
Шаг 8 — Добавьте следующую строку кода в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('terminate',[ 'middleware' => 'terminate', 'uses' => 'ABCController@index', ]);
Шаг 9 — Посетите следующий URL, чтобы проверить Terminable Middleware.
http://localhost:8000/terminate
Шаг 10 — Вывод будет выглядеть, как показано на следующем рисунке.