товары

Промежуточное ПО Laravel, как оно работает

Промежуточное ПО Laravel — это промежуточный уровень приложения, который находится между запросом пользователя и ответом приложения.

Это означает, что когда пользователь (представление Laravel) делает запрос к серверу (контроллеру Laravel), запрос будет проходить через промежуточное ПО. Таким образом промежуточное ПО может проверить, аутентифицирован ли запрос или нет: 

  • если запрос пользователя аутентифицирован, запрос отправляется на серверную часть;
  • если запрос пользователя не прошел проверку подлинности, промежуточное ПО перенаправит пользователя на экран входа в систему.

Laravel позволяет вам defiзакончить и использовать дополнительное промежуточное ПО для выполнения различных задач, кроме аутентификации. 

Промежуточное программное обеспечение Laravel, такое как аутентификация и защита CSRF, находится в каталоге приложение/HTTP/промежуточное ПО .

Таким образом, мы можем сказать, что промежуточное ПО представляет собой фильтр HTTP-запросов, с помощью которого можно проверять условия и выполнять действия.

Создание промежуточного ПО

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

php artisan make:middleware <name-of-middleware>

Мы создаем middleware и мы называем это CheckAge, artisan ответит нам так:

Окно выше показывает, что промежуточное ПО было успешно создано с именем « CheckAge ».

Чтобы узнать, создано промежуточное ПО CheckAge или нет, перейдите в проект в папке app/Http/Middleware, и вы увидите только что созданный файл

Вновь созданный файл имеет следующий код

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

Использовать промежуточное ПО

Чтобы использовать промежуточное ПО, нам необходимо его зарегистрировать.

В Laravel есть два типа промежуточного ПО:

  • Middleware globale
  • Route Middleware

Il глобальное промежуточное ПО будет выполняться при каждом HTTP-запросе приложения, а ПО промежуточного слоя маршрутизации будет присвоен определенный путь. Промежуточное ПО можно зарегистрировать по адресу приложение/Http/Kernel.php. Этот файл содержит два свойства $промежуточное ПО e $routeПромежуточное ПО . Свойство $middleware используется для регистрации глобального промежуточного программного обеспечения и владения $routeПромежуточное ПО используется для регистрации промежуточного программного обеспечения для конкретного маршрута.

Чтобы зарегистрировать глобальное ПО промежуточного слоя, укажите класс в конце свойства $middleware.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

Чтобы зарегистрировать ПО промежуточного слоя для конкретного маршрута, добавьте ключ и значение в свойство $routeMiddleware.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Мы создали CheckAge в предыдущем примере. Теперь мы можем зарегистрировать это в свойстве маршрута промежуточного программного обеспечения. Код для такой регистрации показан ниже.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

Параметры промежуточного ПО

Мы также можем передавать параметры через промежуточное ПО. 

Например, если ваше приложение имеет разные роли, такие как пользователь, администратор, суперадминистратор и т. д. и вы хотите аутентифицировать действие на основе роли, вы можете сделать это, передав параметры с промежуточным программным обеспечением. 

Созданное нами промежуточное ПО содержит следующую функцию, и мы можем передавать пользовательские аргументы после аргумента $следующий .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

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

Измените метод дескриптора следующим образом.

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

мы добавили параметр $role, а внутри метода строка echo написать вывод имя роли.

Инновационный бюллетень
Не пропустите самые важные новости об инновациях. Зарегистрируйтесь, чтобы получать их по электронной почте.

Теперь давайте зарегистрируем промежуточное ПО RoleMiddleware для определенного пути.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

Теперь, чтобы протестировать промежуточное ПО с параметром, нам нужно создать запрос и ответ. Чтобы смоделировать ответ, давайте создадим контроллер, который мы назовем TestController.

php artisan make:controller TestController --plain

только что выполненная команда создаст новый контроллер внутри папки app/Http/TestController.php, и измените метод index с линией echo "<br>Test Controller.";

<?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.";
   }
}

После настройки ответа строим запрос, редактируя файл routes.phpдобавив route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

на данный момент мы можем попробовать пример, посетив URL-адрес http://localhost:8000/role

и в браузере мы увидим два echo

Role editor
Test Controller

Терминируемое промежуточное ПО

Il terminable Middleware выполняет некоторые задачи после отправки ответа в браузер. Этого можно достичь, создав промежуточное ПО с помощью метода завершиться в промежуточном программном обеспечении. Il terminable Middleware должны быть зарегистрированы в middleware Глобальный. Метод terminate получит два аргумента $ запрос e $ ответ. 

Метод Terminate должен быть создан, как показано в следующем коде.

php artisan make:middleware 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.";
   }
}

в этом случае у нас есть метод handle и метод terminate с двумя параметрами $request e $response.

Теперь давайте зарегистрируем Middleware

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

Теперь нам нужно создать контроллер для имитации ответа.

php artisan make:controller XYZController --plain

изменение содержимого класса

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Теперь нам нужно отредактировать файл routes/web.php добавление маршрутов, необходимых для активации запроса

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

на данный момент мы можем попробовать пример, посетив URL-адрес http://localhost:8000/terminate

и в браузере мы увидим следующие строки

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Вы также можете быть заинтересованы в:

Инновационный бюллетень
Не пропустите самые важные новости об инновациях. Зарегистрируйтесь, чтобы получать их по электронной почте.

АРТИКОЛИ recenti

Антимонопольный регулятор Великобритании поднял тревогу BigTech по поводу GenAI

Британское CMA выступило с предупреждением о поведении крупных технологических компаний на рынке искусственного интеллекта. Там…

Апрель 18 2024

Casa Green: энергетическая революция для устойчивого будущего в Италии

Указ «Case Green», сформулированный Европейским Союзом для повышения энергоэффективности зданий, завершил законодательный процесс…

Апрель 18 2024

Электронная торговля в Италии выросла на 27% согласно новому отчету Casaleggio Associati.

Представлен годовой отчет Casaleggio Associati об электронной коммерции в Италии. Доклад под названием «ИИ-коммерция: границы электронной коммерции с искусственным интеллектом».…

Апрель 17 2024

Блестящая идея: Bandalux представляет Airpure®, завесу, очищающую воздух

Результат постоянных технологических инноваций и заботы об окружающей среде и благополучии людей. Bandalux представляет Airpure®, палатку…

Апрель 12 2024

Читайте «Инновации» на вашем языке

Инновационный бюллетень
Не пропустите самые важные новости об инновациях. Зарегистрируйтесь, чтобы получать их по электронной почте.

Следуйте за нами