Articles

Laravel middleware yadda yake aiki

Laravel middleware shine matsakaicin aikace-aikacen Layer wanda ke shiga tsakanin buƙatar mai amfani da martanin aikace-aikacen.

Wannan yana nufin cewa lokacin da mai amfani (Laravel view) ya yi buƙatu ga uwar garken (Laravel controller), buƙatar za ta wuce ta tsakiya. Ta wannan hanyar middleware na iya bincika idan buƙatar ta tabbata ko a'a: 

  • idan buƙatar mai amfani ta tabbata, ana aika buƙatar zuwa ga baya;
  • idan buƙatar mai amfani ba ta tabbata ba, middleware zai tura mai amfani zuwa allon shiga.

Laravel yana ba ku damar defigama kuma yi amfani da ƙarin na'urorin tsakiya don aiwatar da ayyuka iri-iri banda tantancewa. 

Laravel middlewares, kamar tantancewa da kariyar CSRF, suna cikin kundin adireshi app/Http/Middleware .

Don haka zamu iya cewa middleware shine tace buƙatun http, ta inda za'a iya tabbatar da yanayi da aiwatar da ayyuka.

Ƙirƙirar middleware

Don ƙirƙirar sabon middleware muna gudanar da umarni mai zuwa:

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

Muna ƙirƙirar middleware kuma muna kiransa CheckAge, artisan zai amsa mana kamar haka:

Tagan da ke sama yana nuna cewa an yi nasarar ƙirƙirar middleware tare da sunan ” Duba Shekaru ".

Don ganin ko an ƙirƙiri na CheckAge ko a'a, je zuwa aikin a cikin babban fayil ɗin app/Http/Middleware, kuma za ku ga sabon fayil ɗin da aka ƙirƙira.

Sabuwar fayil ɗin da aka ƙirƙira yana da lambar mai zuwa

<?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);
    }
}

Yi amfani da middleware

Don amfani da middleware, muna buƙatar yin rajistar shi.

Akwai nau'ikan tsakiya guda biyu a cikin Laravel:

  • Middleware globale
  • Route Middleware

Il duniya middleware za a aiwatar da kowane buƙatun HTTP daga aikace-aikacen, yayin da Hanyar Middleware za a sanya wa wata hanya ta musamman. Ana iya yin rijistar Middleware a app/Http/Kernel.php. Wannan fayil ɗin ya ƙunshi kaddarori biyu $middleware e $ RouteMiddleware . Dukiyar $midlware ana amfani da shi don yin rijistar middleware na duniya da ikon mallaka $ RouteMiddleware ana amfani da shi don yin rajistar takamaiman hanyoyin tsakiya.

Don yin rijistar middleware na duniya, jera ajin a ƙarshen kadarar $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,
    ];

Don yin rajistar takamaiman hanyar tsakiya, ƙara maɓalli da ƙima zuwa kadarar $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,
    ];

Mun halitta Duba Shekaru a cikin misalin da ya gabata. Yanzu za mu iya yin rajistar wannan a cikin kayan hanyar tsakiya. Ana nuna lambar don irin wannan rajista a ƙasa.

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

Siffofin tsakiya

Hakanan zamu iya wuce sigogi tare da Middleware. 

Misali, idan aikace-aikacenku yana da ayyuka daban-daban kamar mai amfani, admin, super admin da sauransu. kuma kuna son tabbatar da aikin bisa ga rawar, za ku iya yin shi ta hanyar wucewa da sigogi tare da tsakiya. 

Matsakaicin da muka ƙirƙira ya ƙunshi ayyuka masu zuwa, kuma muna iya ƙaddamar da gardama na al'ada bayan gardama $na gaba .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

Yanzu bari mu yi ƙoƙarin saita ma'aunin rawar zuwa sabon middleware wanda za mu ƙirƙira daga karce, sannan ci gaba da ƙirƙirar Role Middleware ta hanyar aiwatar da umarni mai zuwa.

Gyara hanyar rikewa kamar haka

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

mun kara da siga $role, kuma a cikin hanyar layi echo don rubuta fitarwa sunan rawar.

Jaridar Innovation
Kada ku rasa mafi mahimmancin labarai akan ƙirƙira. Yi rajista don karɓar su ta imel.

Yanzu bari mu yi rijistar RoleMiddleware middleware don takamaiman hanya

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

Yanzu don gwada middleware tare da siga, muna buƙatar ƙirƙirar buƙata da amsa. Don kwatanta amsa bari mu ƙirƙiri mai sarrafa wanda za mu kira TestController

php artisan make:controller TestController --plain

umarnin da aka aiwatar kawai zai haifar da sabon mai sarrafawa a cikin babban fayil ɗin app/Http/TestController.php, kuma canza hanyar index tare da layi 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.";
   }
}

Bayan saita amsa, muna gina buƙatar ta hanyar gyara fayil ɗin routes.phpta ƙara da route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

a wannan lokaci za mu iya gwada misali ta ziyartar URL http://localhost:8000/role

kuma a browser za mu ga biyu echo

Role editor
Test Controller

Ƙarshe Middleware

Il terminable Middleware yana yin wasu ayyuka bayan an aika da martani ga mai lilo. Ana iya samun wannan ta hanyar ƙirƙirar tsaka-tsaki tare da hanyar ƙare a cikin middleware. Il terminable Middleware dole ne a yi rajista tare da middleware duniya. Hanyar terminate zai sami hujjoji biyu roƙon $ e $masu amsa. 

Hanyar Terminate dole ne a ƙirƙira kamar yadda aka nuna a lamba mai zuwa.

php artisan make:middleware TerminateMiddleware

Da zarar an halicci middleware app/Http/Middleware/TerminateMiddleware.php mu gyara code kamar haka

<?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.";
   }
}

a wannan yanayin muna da hanya handle da wata hanya terminate tare da sigogi biyu $request e $response.

Yanzu bari mu yi rajista da 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,
    ];

Yanzu muna buƙatar ƙirƙirar mai sarrafawa don daidaita martani

php artisan make:controller XYZController --plain

gyara abubuwan da ke cikin ajin

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Yanzu muna buƙatar gyara fayil ɗin routes/web.php ƙara hanyoyin da ake buƙata don kunna buƙatar

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

a wannan lokaci za mu iya gwada misali ta ziyartar URL http://localhost:8000/terminate

kuma a browser za mu ga wadannan layukan

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

Ercole Palmeri

Hakanan kuna iya son:

Jaridar Innovation
Kada ku rasa mafi mahimmancin labarai akan ƙirƙira. Yi rajista don karɓar su ta imel.

Kwanan nan labarin

Veeam yana fasalta mafi cikakken tallafi don ransomware, daga kariya zuwa amsawa da murmurewa

Coveware ta Veeam zai ci gaba da ba da sabis na amsa abin da ya faru ta hanyar intanet. Coveware zai ba da damar bincikar bincike da damar gyarawa…

23 Afrilu 2024

Kore da Juyin Juya Halin Dijital: Yadda Kulawar Hasashen ke Canza Masana'antar Mai & Gas

Kulawa da tsinkaya yana kawo sauyi a fannin mai & iskar gas, tare da sabbin hanyoyin kula da tsirrai.…

22 Afrilu 2024

Mai kula da amincin Burtaniya ya ɗaga ƙararrawar BigTech akan GenAI

Hukumar CMA ta Burtaniya ta ba da gargadi game da halayen Big Tech a cikin kasuwar bayanan sirri. Akwai…

18 Afrilu 2024

Casa Green: juyin juya halin makamashi don dorewar makoma a Italiya

Dokar "Green Houses" da Tarayyar Turai ta tsara don inganta ingantaccen makamashi na gine-gine, ta kammala aikinta na majalisar tare da…

18 Afrilu 2024