Промежуточное программное обеспечение действует как мост между запросом и ответом. Это тип фильтрующего механизма. В этой главе описывается механизм промежуточного программного обеспечения в 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 — Вывод будет выглядеть, как показано на следующем рисунке.







