Това означава, че когато потребителят (Laravel изглед) направи заявка към сървъра (Laravel контролер), заявката ще премине през междинния софтуер. По този начин междинният софтуер може да провери дали заявката е удостоверена или не:
Laravel ви позволява defiзавършете и използвайте допълнителен междинен софтуер за изпълнение на различни задачи с изключение на удостоверяване.
Средните софтуери на Laravel, като удостоверяване и CSRF защита, се намират в директорията приложение/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
Може да ви хареса също:
Военноморският сектор е истинска световна икономическа сила, която се е насочила към пазар от 150 милиарда...
Миналия понеделник Financial Times обяви сделка с OpenAI. FT лицензира своята журналистика от световна класа...
Милиони хора плащат за стрийминг услуги, като плащат месечни абонаментни такси. Разпространено е мнението, че вие…
Coveware от Veeam ще продължи да предоставя услуги за реакция при инциденти с кибер изнудване. Coveware ще предлага криминалистика и възможности за възстановяване...