ፅሁፎች

Laravel middleware እንዴት እንደሚሰራ

Laravel middleware በተጠቃሚው ጥያቄ እና በመተግበሪያው ምላሽ መካከል ጣልቃ የሚገባ መካከለኛ የመተግበሪያ ንብርብር ነው።

ይህ ማለት ተጠቃሚው (ላራቬል እይታ) ለአገልጋዩ (ላራቬል ተቆጣጣሪ) ጥያቄ ሲያቀርብ ጥያቄው በመካከለኛው ዌር ውስጥ ያልፋል ማለት ነው። በዚህ መንገድ መካከለኛው ዌር ጥያቄው የተረጋገጠ መሆኑን ወይም አለመሆኑን ማረጋገጥ ይችላል፡- 

  • የተጠቃሚው ጥያቄ ከተረጋገጠ ጥያቄው ወደ ጀርባው ይላካል;
  • የተጠቃሚው ጥያቄ ካልተረጋገጠ መካከለኛው ዌር ተጠቃሚውን ወደ የመግቢያ ስክሪን ይመራዋል።

ላራቬል ይፈቅዳል defiከማረጋገጫ በስተቀር የተለያዩ ተግባራትን ለማከናወን ተጨማሪ መካከለኛ ዌርን ጨርስ እና ተጠቀም። 

እንደ ማረጋገጫ እና CSRF ጥበቃ ያሉ የላራቭል መካከለኛ ዕቃዎች በማውጫው ውስጥ ይገኛሉ መተግበሪያ/ኤችቲቲፒ/ሚድልዌር .

ስለዚህ መካከለኛ ዌር የ http ጥያቄ ማጣሪያ ነው ማለት እንችላለን፣ በዚህም ሁኔታዎችን ማረጋገጥ እና ድርጊቶችን ማከናወን ይቻላል።

መካከለኛ ዕቃዎችን መፍጠር

አዲስ መካከለኛ ዌር ለመፍጠር የሚከተለውን ትዕዛዝ እናስኬዳለን፡

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

እኛ እንፈጥራለን middleware እና እንጠራዋለን CheckAge, artisan እንደሚከተለው ይመልስልናል።

ከላይ ያለው መስኮት መካከለኛ ዌር በስም በተሳካ ሁኔታ መፈጠሩን ያሳያል ” CheckAge ".

የCheckAge 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 ዓለም አቀፍ መካከለኛ ከመተግበሪያው በሚቀርብ እያንዳንዱ የኤችቲቲፒ ጥያቄ ላይ ይፈጸማል፣ የ ሚድዌር መስመር ለተወሰነ መንገድ ይመደባል. ሚድልዌር በ ላይ መመዝገብ ይችላል። መተግበሪያ/ኤችቲቲፒ/Kernel.php። ይህ ፋይል ሁለት ንብረቶችን ይዟል $ሚድልዌር e $ RouteMiddleware . የ$ሚድልዌር ንብረት አለምአቀፍ መካከለኛ ዌር እና ባለቤትነትን ለመመዝገብ ጥቅም ላይ ይውላል $ RouteMiddleware መንገድ-ተኮር መካከለኛ ዌር ለመመዝገብ ይጠቅማል።

አለምአቀፍ ሚድልዌርን ለመመዝገብ በ$middware ንብረቱ መጨረሻ ላይ ያለውን ክፍል ይዘርዝሩ።

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

አሁን መካከለኛውን በመለኪያው ለመሞከር, ጥያቄ እና ምላሽ መፍጠር አለብን. ምላሹን ለማስመሰል 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',
]);

በዚህ ጊዜ ዩአርኤልን በመጎብኘት ምሳሌውን መሞከር እንችላለን 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.

አሁን ሚድልዌርን እንመዘግብ

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

በዚህ ጊዜ ዩአርኤልን በመጎብኘት ምሳሌውን መሞከር እንችላለን http://localhost:8000/terminate

እና በአሳሹ ውስጥ የሚከተሉትን መስመሮች እናያለን

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

እንዲሁም የሚከተሉትን ማድረግ ይችላሉ ፦

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

የቅርብ ጊዜ ጽሁፎች

Veeam ከጥበቃ እስከ ምላሽ እና ማገገሚያ ድረስ ለቤዛዌር በጣም አጠቃላይ ድጋፍን ያቀርባል

Coveware by Veeam የሳይበር ዘረፋ የአደጋ ምላሽ አገልግሎቶችን መስጠቱን ይቀጥላል። Coveware የፎረንሲክስ እና የማገገሚያ ችሎታዎችን ያቀርባል…

23 April 2024

አረንጓዴ እና ዲጂታል አብዮት፡- የመተንበይ ጥገና የነዳጅ እና ጋዝ ኢንዱስትሪን እንዴት እየለወጠ ነው።

የመተንበይ ጥገና የዘይት እና ጋዝ ዘርፉን አብዮት እያደረገ ነው፣ ለዕፅዋት አስተዳደር ፈጠራ እና ንቁ አቀራረብ።…

22 April 2024

የዩኬ ፀረ እምነት ተቆጣጣሪ የBigTech ማንቂያ በጄኔአይ ላይ ያስነሳል።

የዩኬ ሲኤምኤ ስለ ቢግ ቴክ ባህሪ በአርቴፊሻል ኢንተለጀንስ ገበያ ላይ ማስጠንቀቂያ ሰጥቷል። እዚያ…

18 April 2024

ካሳ አረንጓዴ፡ ለወደፊት ጣሊያን የኢነርጂ አብዮት

የሕንፃዎችን ኢነርጂ ውጤታማነት ለማሳደግ በአውሮፓ ህብረት የተቀረፀው የ"ኬዝ አረንጓዴ" ድንጋጌ የህግ አውጭ ሂደቱን በ…

18 April 2024

ፈጠራን በቋንቋዎ ያንብቡ

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

ይከተሉን