ეს ნიშნავს, რომ როდესაც მომხმარებელი (Laravel view) უგზავნის მოთხოვნას სერვერს (Laravel controller), მოთხოვნა გაივლის შუა პროგრამაში. ამ გზით შუა პროგრამას შეუძლია შეამოწმოს მოთხოვნა დამოწმებულია თუ არა:
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);
}
}
Middleware გამოსაყენებლად, ჩვენ უნდა დავრეგისტრირდეთ.
Laravel-ში არის ორი ტიპის შუალედური პროგრამა:
Middleware globale
Route Middleware
Il გლობალური შუალედური პროგრამა შესრულდება აპლიკაციიდან ყველა HTTP მოთხოვნაზე, ხოლო მარშრუტი Middleware მიენიჭება კონკრეტულ გზას. Middleware შეიძლება დარეგისტრირდეს 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 წინა მაგალითში. ჩვენ ახლა შეგვიძლია დაარეგისტრიროთ ეს Middleware route თვისებაში. ასეთი რეგისტრაციის კოდი ნაჩვენებია ქვემოთ.
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);
}
ახლა ვცადოთ როლის პარამეტრი დავაყენოთ ახალ შუალედზე, რომლის შექმნასაც ვაპირებთ ნულიდან, შემდეგ გავაგრძელოთ Role Middleware-ის შექმნა შემდეგი ბრძანების გაშვებით.
შეცვალეთ სახელურის მეთოდი შემდეგნაირად
<?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
თქვენ ალბათ მოგეწონებათ:
Coveware by Veeam გააგრძელებს კიბერ გამოძალვის ინციდენტებზე რეაგირების სერვისების მიწოდებას. Coveware შემოგთავაზებთ სასამართლო ექსპერტიზისა და გამოსწორების შესაძლებლობებს…
პროგნოზირებადი მოვლა რევოლუციას ახდენს ნავთობისა და გაზის სექტორში, ქარხნის მართვის ინოვაციური და აქტიური მიდგომით.…
გაერთიანებული სამეფოს CMA-მ გამოსცა გაფრთხილება Big Tech-ის ქცევის შესახებ ხელოვნური ინტელექტის ბაზარზე. იქ…
ევროკავშირის მიერ შენობების ენერგოეფექტურობის გაზრდის მიზნით შემუშავებულმა „Case Green“ დადგენილებამ დაასრულა საკანონმდებლო პროცესი…