Учебники

Laravel — Middleware

Промежуточное программное обеспечение действует как мост между запросом и ответом. Это тип фильтрующего механизма. В этой главе описывается механизм промежуточного программного обеспечения в Laravel.

Laravel включает промежуточное программное обеспечение, которое проверяет, аутентифицирован ли пользователь приложения или нет. Если пользователь аутентифицирован, он перенаправляет на домашнюю страницу, в противном случае, если он не перенаправляет на страницу входа.

Промежуточное программное обеспечение можно создать, выполнив следующую команду:

php artisan make:middleware <middleware-name>

Замените <middleware-name> на имя вашего промежуточного программного обеспечения. Промежуточное программное обеспечение, которое вы создаете, можно увидеть в каталоге app / Http / Middleware .

пример

Обратите внимание на следующий пример, чтобы понять механизм промежуточного программного обеспечения —

Шаг 1 — Давайте теперь создадим AgeMiddleware. Чтобы создать это, нам нужно выполнить следующую команду —

php artisan make:middleware AgeMiddleware

Шаг 2 — После успешного выполнения команды вы получите следующий вывод —

AgeMiddleware

Шаг 3AgeMiddleware будет создан в приложении / 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.

RoleMiddleware

Шаг 5 — Выполните следующую команду для создания TestController

php artisan make:controller TestController --plain

Шаг 6 — После успешного выполнения вышеуказанного шага вы получите следующий вывод —

TestController

Шаг 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.

TerminateMiddleware

Шаг 5 — Выполните следующую команду, чтобы создать ABCController .

php artisan make:controller ABCController --plain

Шаг 6 — После успешного выполнения URL вы получите следующий вывод —

ABCController

Шаг 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 — Вывод будет выглядеть, как показано на следующем рисунке.