Статті

Проміжне програмне забезпечення Laravel, як це працює

Проміжне програмне забезпечення Laravel — це проміжний рівень програми, який втручається між запитом користувача та відповіддю програми.

Це означає, що коли користувач (перегляд Laravel) робить запит на сервер (контролер Laravel), запит проходитиме через проміжне програмне забезпечення. Таким чином проміжне програмне забезпечення може перевірити, чи запит автентифікований чи ні: 

  • якщо запит користувача автентифікований, запит надсилається до серверної частини;
  • якщо запит користувача не автентифікований, проміжне програмне забезпечення перенаправить користувача на екран входу.

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

Проміжне програмне забезпечення Laravel, таке як автентифікація та захист CSRF, розташовано в каталозі app/Http/Middleware .

Тому ми можемо сказати, що проміжне програмне забезпечення — це фільтр 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 від ​​програми, тоді як Проміжне програмне забезпечення маршруту буде призначено певному шляху. Проміжне програмне забезпечення можна зареєструвати за адресою app/Http/Kernel.php. Цей файл містить дві властивості $проміжне програмне забезпечення e $routeMiddleware . Властивість $middleware використовується для реєстрації глобального проміжного програмного забезпечення та власності $routeMiddleware використовується для реєстрації проміжного програмного забезпечення, що залежить від маршруту.

Щоб зареєструвати глобальне проміжне програмне забезпечення, укажіть клас у кінці властивості $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,
    ];

Параметри проміжного ПЗ

Ми також можемо передавати параметри за допомогою Middleware. 

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

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

    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

Вам також можуть сподобатися:

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

Останні статті

Інноваційне втручання в доповнену реальність із програмою перегляду Apple у поліклініці Катанії

У поліклініці Катанії проведено операцію офтальмопластики за допомогою комерційного переглядача Apple Vision Pro…

3 травня 2024

Переваги розмальовок для дітей - чарівний світ для будь-якого віку

Розвиток дрібної моторики за допомогою розфарбовування готує дітей до більш складних навичок, таких як письмо. Розфарбувати…

2 травня 2024

Майбутнє тут: як індустрія судноплавства революціонізує світову економіку

Військово-морський сектор є справжньою глобальною економічною силою, яка просунулася до 150-мільярдного ринку...

1 травня 2024

Видавці та OpenAI підписують угоди щодо регулювання потоку інформації, яка обробляється штучним інтелектом

Минулого понеділка Financial Times оголосила про угоду з OpenAI. FT ліцензує свою журналістику світового рівня…

Квітень 30 2024

Читайте Innovation своєю мовою

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

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