Це означає, що коли користувач (перегляд 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 Vision Pro…
Розвиток дрібної моторики за допомогою розфарбовування готує дітей до більш складних навичок, таких як письмо. Розфарбувати…
Військово-морський сектор є справжньою глобальною економічною силою, яка просунулася до 150-мільярдного ринку...
Минулого понеділка Financial Times оголосила про угоду з OpenAI. FT ліцензує свою журналістику світового рівня…