Articles

Laravel middleware kamoo e sebetsang kateng

Laravel middleware ke karolo e bohareng ea kopo e kenang lipakeng tsa kopo ea mosebelisi le karabo ea sesebelisoa.

Sena se bolela hore ha mosebelisi (pono ea Laravel) a etsa kopo ho seva (molaoli oa Laravel), kopo e tla feta har'a li-middleware. Ka tsela ena middleware e ka hlahloba hore na kopo e netefalitsoe kapa che: 

  • haeba kopo ea mosebedisi e tiisitsoe, kopo e romelloa ho backend;
  • haeba kopo ea mosebelisi e sa netefatsoa, ​​middleware e tla lebisa mosebelisi skrineng sa ho kena.

Laravel e u lumella ho etsa joalo defiqeta le ho sebelisa lisebelisoa tse ling tsa mahareng ho etsa mesebetsi e fapaneng ntle le netefatso. 

Laravel middlewares, joalo ka netefatso le ts'ireletso ea CSRF, li fumaneha bukeng app/Http/Middleware .

Ka hona re ka re middleware ke http kopo filter, eo ka eona ho ka khonehang ho netefatsa maemo le ho etsa liketso.

Ho theha li-middleware

Ho theha middleware e ncha re tsamaisa taelo e latelang:

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

Re etsa the middleware mme re e bitsa CheckAge, artisan e tla re araba ka tsela e latelang:

Fesetere e kaholimo e bonts'a hore middleware e entsoe ka katleho ka lebitso " CheckAge ".

Ho bona hore na CheckAge middleware e bōpiloe kapa che, e-ea morerong ho app/Http/Middleware foldareng, 'me u tla bona faele e sa tsoa etsoa.

Faele e sa tsoa etsoa e na le khoutu e latelang

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

Sebelisa li-middleware

Ho sebelisa middleware, re hloka ho e ngolisa.

Ho na le mefuta e 'meli ea li-middleware ho Laravel:

  • Middleware globale
  • Route Middleware

Il Global middleware e tla etsoa ka kopo e 'ngoe le e' ngoe ea HTTP ho tsoa ho kopo, ha ts'ebeliso ea Tsela ea Middleware e tla fuoa tsela e khethehileng. Middleware e ka ngolisoa ho app/Http/Kernel.php. Faele ena e na le litšobotsi tse peli $middleware e $RouteMiddleware . Thepa ea $middleware e sebelisoa ho ngolisa global middleware le beng ba tsona $RouteMiddleware e sebelisoa ho ngolisa li-middleware tse khethehileng.

Ho ngolisa global middleware, thathamisa sehlopha qetellong ea thepa ea $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,
    ];

Ho ngolisa li-middleware tse khethehileng tsa tsela, eketsa senotlolo le boleng ho thepa ea $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,
    ];

Re bopile CheckAge mohlaleng o fetileng. Hona joale re ka ngolisa sena sebakeng sa tsela ea middleware. Khoutu ea ngoliso e joalo e bontšitsoe ka tlase.

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

Litekanyetso tsa Middleware

Re ka boela ra fetisa liparamente ka Middleware. 

Mohlala, haeba sesebelisoa sa hau se na le likarolo tse fapaneng joalo ka mosebelisi, admin, super admin jj. 'me u batla ho netefatsa ketso ho latela karolo, u ka e etsa ka ho fetisa liparamente ka middleware. 

Middleware eo re e entseng e na le ts'ebetso e latelang, 'me re ka fetisa likhang tsa moetlo ka mor'a ngangisano $e latelang .

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

Joale ha re lekeng ho beha paramethara ho "middleware" e ncha eo re tla e theha ho tloha qalong, ebe re tsoela pele ho theha Role Middleware ka ho sebelisa taelo e latelang.

Fetola mokhoa oa ho tšoara ka tsela e latelang

<?php

namespace App\Http\Middleware;
use Closure;

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

re kentse parameter $role, le ka hare ho mokhoa mola echo ho ngola sephetho lebitso la karolo.

Leselinyana la litaba tse ncha
Se ke oa fetoa ke litaba tsa bohlokoa ka ho fetisisa tsa boqapi. Ingolise ho li amohela ka lengolo-tsoibila.

Joale ha re ngoliseng RoleMiddleware middleware bakeng sa tsela e itseng

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

Joale ho leka lisebelisoa tsa mahareng ka paramente, re hloka ho etsa kopo le karabo. Ho etsisa karabo ha re theheng molaoli oo re tla o bitsa TestController

php artisan make:controller TestController --plain

taelo e sa tsoa etsoa e tla theha molaoli e mocha ka har'a foldara app/Http/TestController.php, le ho fetola mokhoa index ka mola 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.";
   }
}

Kamora ho theha karabo, re theha kopo ka ho hlophisa faele routes.phpka ho eketsa route role

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

mothating ona re ka leka mohlala ka ho etela URL http://localhost:8000/role

'me ho sebatli re tla bona tse peli echo

Role editor
Test Controller

Middleware e felisitsoeng

Il terminable Middleware e etsa mesebetsi e itseng ka mora hore karabo e romellwe ho sebadi. Sena se ka finyelloa ka ho theha middleware ka mokhoa kgaola ka hara ntho e mahareng. Il terminable Middleware e tlameha ho ngolisoa le middleware lefatshe ka bophara. Mokhoa terminate e tla fumana likhang tse peli $kopo e $karabo. 

Mokhoa Terminate e tlameha ho etsoa joalo ka ha ho bonts'itsoe khoutu e latelang.

php artisan make:middleware TerminateMiddleware

Hang ha middleware e bōptjoa app/Http/Middleware/TerminateMiddleware.php ha re fetoleng khoutu ka tsela e latelang

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

tabeng ena re na le mokhoa handle le mokhoa terminate ka li-parameter tse peli $request e $response.

Joale a re ngoliseng 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,
    ];

Hona joale re hloka ho theha molaoli ho etsisa karabo

php artisan make:controller XYZController --plain

ho fetola dikahare tsa sehlopha

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

Hona joale re hloka ho fetola file routes/web.php ho eketsa litsela tse hlokahalang ho kenya kopo

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

mothating ona re ka leka mohlala ka ho etela URL http://localhost:8000/terminate

'me ho sebatli re tla bona mela e latelang

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

Ercole Palmeri

Mohlomong u ka rata:

Leselinyana la litaba tse ncha
Se ke oa fetoa ke litaba tsa bohlokoa ka ho fetisisa tsa boqapi. Ingolise ho li amohela ka lengolo-tsoibila.

Lihlooho tsa morao tjena

Boitshunyako bo bocha ho Augmented Reality, ka sebali sa Apple Catania Polyclinic

Ophthalmoplasty ophthalmoplasty opereishene e sebelisang Apple Vision Pro e shebelletse khoebo e entsoe Catania Polyclinic…

3 May 2024

Melemo ea Maqephe a Mebala bakeng sa Bana - lefats'e la boselamose bakeng sa lilemo tsohle

Ho hlaolela tsebo e ntle ea ho tsamaisa likoloi ka ho kenya mebala ho lokisetsa bana bakeng sa litsebo tse rarahaneng joalo ka ho ngola. Ho mebala...

2 May 2024

Bokamoso bo Mona: Kamoo Indasteri ea Thomello e Felisang Moruo oa Lefatše

Lekala la likepe ke matla a 'nete a moruo a lefats'e, a tsamaileng ho ea 'marakeng oa limilione tse likete tse 150...

1 May 2024

Bahatisi le OpenAI ba saena litumellano tsa ho laola phallo ea tlhahisoleseling e sebetsitsoeng ke Artificial Intelligence

Mantaha o fetileng, Financial Times e phatlalalitse selekane le OpenAI. FT e fana ka tumello ea bongoli ba eona ba maemo a lefats'e…

30 April 2024