Artikoloj

Laravel mezprogramo kiel ĝi funkcias

Laravel-mezvaro estas meza aplikaĵotavolo kiu intervenas inter la peto de la uzanto kaj la respondo de la aplikaĵo.

Ĉi tio signifas, ke kiam la uzanto (Laravel-vido) faras peton al la servilo (Laravel-regilo), la peto trapasos la mezprogramon. Tiel la mezprogramo povas kontroli ĉu la peto estas aŭtentikigita aŭ ne: 

  • se la peto de la uzanto estas aŭtentikigita, la peto estas sendita al la backend;
  • se la peto de la uzanto estas neaŭtentikigita, la mezprogramo redirektos la uzanton al la ensaluta ekrano.

Laravel permesas vin defifini kaj uzu plian mezvaron por plenumi diversajn taskojn krom aŭtentigo. 

Laravel-mezvaroj, kiel aŭtentikigo kaj CSRF-protekto, troviĝas en la dosierujo app/Http/Middleware .

Ni povas do diri, ke la mezprogramo estas http-peta filtrilo, per kiu eblas kontroli kondiĉojn kaj plenumi agojn.

Kreante mezvaron

Por krei novan mezvaron ni rulas la jenan komandon:

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

Ni kreas la middleware kaj ni nomas ĝin CheckAge, artisan respondos al ni jene:

La supra fenestro montras, ke la mezprogramo estis sukcese kreita kun la nomo " Kontrolu Aĝon ".

Por vidi ĉu la mezuraĵo de CheckAge estas kreita aŭ ne, iru al la projekto en la dosierujo de app/Http/Middleware, kaj vi vidos la nove kreitan dosieron.

La lastatempe kreita dosiero havas la jenan kodon

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

Uzu mezvaron

Por uzi mezvaron, ni devas registri ĝin.

Estas du specoj de mezvaro en Laravel:

  • Middleware globale
  • Route Middleware

Il tutmonda mezvaro estos efektivigita sur ĉiu HTTP-peto de la aplikaĵo, dum la Itinero Middleware estos asignita al specifa vojo. Middleware povas esti registrita ĉe app/Http/Kernel.php. Ĉi tiu dosiero enhavas du trajtojn $mezaĵoj e $routeMiddleware . La posedaĵo $middleware estas uzata por registri tutmondan mezvaron kaj proprieton $routeMiddleware estas uzata por registri itineran mezvaron.

Por registri tutmondan mezvaron, listigu la klason ĉe la fino de la $middleware-posedaĵo.

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

Por registri itineran mezvaron, aldonu la ŝlosilon kaj valoron al la posedaĵo $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,
    ];

Ni kreis Kontrolu Aĝon en la antaŭa ekzemplo. Ni nun povas registri ĉi tion en la posedaĵo de middleware route. La kodo por tia registriĝo estas montrita sube.

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

Mezvaraj parametroj

Ni ankaŭ povas pasi parametrojn kun Middleware. 

Ekzemple, se via aplikaĵo havas malsamajn rolojn kiel uzanto, administranto, superadministranto ktp. kaj vi volas aŭtentikigi la agon surbaze de la rolo, vi povas fari ĝin preterpasante la parametrojn kun la mezvaro. 

La mezprogramo, kiun ni kreis, enhavas la sekvan funkcion, kaj ni povas pasi kutimajn argumentojn post la argumento $sekva .

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

Nun ni provu agordi la rolan parametron al nova mezvaro, kiun ni kreos de nulo, poste kreu Role Middleware rulante la sekvan komandon

Modifi la tenilmetodon jene

<?php

namespace App\Http\Middleware;
use Closure;

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

ni aldonis la parametron $role, kaj ene de la metodo la linio echo por skribi la eligon la nomon de la rolo.

Informilo pri novigo
Ne maltrafu la plej gravajn novaĵojn pri novigado. Registriĝi por ricevi ilin retpoŝte.

Nun ni registri la mezvaron RoleMiddleware por specifa vojo

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

Nun por testi la mezprogramon kun la parametro, ni devas krei peton kaj respondon. Por simuli la respondon, ni kreu la regilon, kiun ni nomos TestController

php artisan make:controller TestController --plain

la ĵus plenumita komando kreos novan regilon en la dosierujo app/Http/TestController.php, kaj ŝanĝu la metodon index kun la linio 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.";
   }
}

Post agordo de la respondo, ni konstruas la peton redaktante la dosieron routes.phpaldonante la route role

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

ĉe ĉi tiu punkto ni povas provi la ekzemplon vizitante la URL http://localhost:8000/role

kaj en la retumilo ni vidos la du echo

Role editor
Test Controller

Finigebla Mezvaro

Il terminable Middleware plenumas kelkajn taskojn post kiam la respondo estas sendita al la retumilo. Ĉi tio povas esti atingita kreante mezvaron kun la metodo finiĝas en la mezvaro. Il terminable Middleware devas esti registrita ĉe la middleware tutmonda. La metodo terminate ricevos du argumentojn $peto e $respondo. 

La metodo Terminate devas esti kreita kiel montrite en la sekva kodo.

php artisan make:middleware TerminateMiddleware

Post kiam la mezvaro estas kreita app/Http/Middleware/TerminateMiddleware.php ni modifu la kodon jene

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

en ĉi tiu kazo ni havas metodon handle kaj metodo terminate kun la du parametroj $request e $response.

Nun ni registri la 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,
    ];

Nun ni devas krei la regilon por simuli la respondon

php artisan make:controller XYZController --plain

modifante la enhavon de la klaso

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

Nun ni devas redakti la dosieron routes/web.php aldonante la vojojn necesajn por aktivigi la peton

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

ĉe ĉi tiu punkto ni povas provi la ekzemplon vizitante la URL http://localhost:8000/terminate

kaj en la retumilo ni vidos la sekvajn liniojn

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

Ercole Palmeri

Ankaŭ vi povus ŝati:

Informilo pri novigo
Ne maltrafu la plej gravajn novaĵojn pri novigado. Registriĝi por ricevi ilin retpoŝte.

Lastaj artikoloj

UK-antitrusta reguligisto vekas BigTech-alarmon pri GenAI

La UK CMA publikigis averton pri la konduto de Big Tech en la merkato de artefarita inteligenteco. Tie…

18 aprilo 2024

Casa Green: energia revolucio por daŭripova estonteco en Italio

La Dekreto "Verdaj Domoj", formulita de Eŭropa Unio por plibonigi la energi-efikecon de konstruaĵoj, finis sian leĝdonan procezon per...

18 aprilo 2024

Ekomerco en Italio ĉe + 27% laŭ la nova Raporto de Casaleggio Associati

La jarraporto de Casaleggio Associati pri Ekomerco en Italio prezentita. Raporto titolita "AI-Komerco: la limoj de Ekomerco kun Artefarita Inteligenteco"....

17 aprilo 2024

Brila Ideo: Bandalux prezentas Airpure®, la kurtenon, kiu purigas la aeron

Rezulto de konstanta teknologia novigo kaj engaĝiĝo al la medio kaj la bonfarto de homoj. Bandalux prezentas Airpure®, tendon...

12 aprilo 2024