Это означает, что когда пользователь (представление 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
Вы также можете быть заинтересованы в:
Британское CMA выступило с предупреждением о поведении крупных технологических компаний на рынке искусственного интеллекта. Там…
Указ «Case Green», сформулированный Европейским Союзом для повышения энергоэффективности зданий, завершил законодательный процесс…
Представлен годовой отчет Casaleggio Associati об электронной коммерции в Италии. Доклад под названием «ИИ-коммерция: границы электронной коммерции с искусственным интеллектом».…
Результат постоянных технологических инноваций и заботы об окружающей среде и благополучии людей. Bandalux представляет Airpure®, палатку…