بیشتر

Laravel Middleware دا څنګه کار کوي

Laravel Middleware یو منځمهاله غوښتنلیک پرت دی چې د کارونکي غوښتنې او د غوښتنلیک ځواب ترمنځ مداخله کوي.

دا پدې مانا ده چې کله کاروونکي (Laravel view) سرور (Laravel کنټرولر) ته غوښتنه کوي، غوښتنه به د منځني وییر له لارې تیریږي. په دې توګه منځنی وییر کولی شي وګوري چې ایا غوښتنه تایید شوې که نه: 

  • که چیرې د کارونکي غوښتنه تصدیق شوې وي، غوښتنه بیرته پای ته لیږل کیږي؛
  • که چیرې د کارونکي غوښتنه غیر مستند وي، منځنۍ وییر به کاروونکي د ننوتلو سکرین ته واړوي.

Laravel تاسو ته اجازه درکوي defiبشپړ کړئ او د تصدیق کولو پرته د مختلف کارونو ترسره کولو لپاره اضافي میډرویر وکاروئ. 

Laravel Middlewares، لکه تصدیق او د CSRF محافظت، په لارښود کې موقعیت لري اپلیکیشن/Http/میډل ویئر .

له همدې امله موږ کولی شو ووایو چې مینځنی ویر د http غوښتنې فلټر دی، د کوم له لارې چې دا ممکنه ده چې شرایط تایید او عمل ترسره کړي.

د منځني وسایلو جوړول

د نوي مینځلویر رامینځته کولو لپاره موږ لاندې کمانډ چلوو:

php artisan make:middleware <name-of-middleware>

موږ جوړوو middleware او موږ ورته وایو CheckAge, artisan موږ به په لاندې ډول ځواب ووایو:

پورته کړکۍ ښیې چې مینځنی ویر په بریالیتوب سره د نوم سره رامینځته شوی. چک عمر ".

د دې لپاره چې وګورئ چې د CheckAge Middleware جوړ شوی یا نه، په ایپ/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 globale
  • Route Middleware

Il نړیوال منځنی وسایل د غوښتنلیک څخه په هر HTTP غوښتنه کې به اجرا شي، پداسې حال کې چې د مینځلو لار یوې ځانګړې لارې ته به وګمارل شي. میډیل ویئر کې راجستر کیدی شي app/Http/Kernel.php. دا فایل دوه ملکیتونه لري $منځنی سامان e $routeMiddleware . د $ منځنۍ وسایطو ملکیت د نړیوال منځنی وسایطو او ملکیت ثبتولو لپاره کارول کیږي $routeMiddleware د روټ ځانګړي منځني وسایط ثبتولو لپاره کارول کیږي.

د نړیوال مینځلویر راجستر کولو لپاره، ټولګي د $midleware ملکیت په پای کې لیست کړئ.

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,
    ];

موږ جوړ کړ چک عمر په تیرو مثال کې. موږ اوس کولی شو دا د مینځني لارې په ملکیت کې ثبت کړو. د دې ډول راجسټریشن کوډ لاندې ښودل شوی.

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 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,
    ];

اوس د پیرامیټر سره د مینځلویر ازموینې لپاره ، موږ اړتیا لرو غوښتنه او ځواب رامینځته کړو. د ځواب سمولو لپاره راځئ چې کنټرولر جوړ کړو چې موږ به یې ټیسټ کنټرولر ووایو

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

تاسو ممکن دا هم خوښ کړئ:

د نوښت خبر پاڼه
د نوښت په اړه خورا مهم خبرونه له لاسه مه ورکوئ. د بریښنالیک له لارې دوی ترلاسه کولو لپاره لاسلیک وکړئ.

وروستي مقالې

د سمارټ لاک مارکیټ: د بازار څیړنې راپور خپور شو

د سمارټ لاک مارکیټ اصطلاح د تولید ، توزیع او کارولو شاوخوا صنعت او ایکوسیستم ته اشاره کوي ...

27 مارزو 2024

د ډیزاین نمونې څه دي: ولې یې وکاروئ، طبقه بندي، ګټې او زیانونه

د سافټویر انجینرۍ کې، ډیزاین نمونې د هغو ستونزو لپاره غوره حلونه دي چې معمولا د سافټویر ډیزاین کې واقع کیږي. زه لکه…

26 مارزو 2024

د صنعتي نښه کولو تخنیکي تکامل

صنعتي نښه کول یوه پراخه اصطلاح ده چې ډیری تخنیکونه پکې شامل دي چې په سطحه د دایمي نښو رامینځته کولو لپاره کارول کیږي ...

25 مارزو 2024

د ایکسل میکرو مثالونه د VBA سره لیکل شوي

لاندې ساده اکسل میکرو مثالونه د VBA اټکل شوي لوستلو وخت په کارولو سره لیکل شوي: 3 دقیقې مثال…

25 مارزو 2024

نوښت په خپله ژبه ولولئ

د نوښت خبر پاڼه
د نوښت په اړه خورا مهم خبرونه له لاسه مه ورکوئ. د بریښنالیک له لارې دوی ترلاسه کولو لپاره لاسلیک وکړئ.

مونږ سره په