raksti

Laravel starpprogrammatūra, kā tā darbojas

Laravel starpprogrammatūra ir starpposma lietojumprogrammas slānis, kas iejaucas starp lietotāja pieprasījumu un lietojumprogrammas atbildi.

Tas nozīmē, ka tad, kad lietotājs (Laravel skats) iesniedz pieprasījumu serverim (Laravel kontrolleris), pieprasījums tiks nosūtīts caur starpprogrammatūru. Tādā veidā starpprogrammatūra var pārbaudīt, vai pieprasījums ir autentificēts vai nē: 

  • ja lietotāja pieprasījums ir autentificēts, pieprasījums tiek nosūtīts aizmugursistēmai;
  • ja lietotāja pieprasījums nav autentificēts, starpprogrammatūra novirzīs lietotāju uz pieteikšanās ekrānu.

Laravel ļauj jums defipabeigt un izmantot papildu starpprogrammatūru, lai veiktu dažādus uzdevumus, izņemot autentifikāciju. 

Laravel starpprogrammatūra, piemēram, autentifikācija un CSRF aizsardzība, atrodas direktorijā app/Http/Middleware .

Tāpēc mēs varam teikt, ka starpprogrammatūra ir http pieprasījuma filtrs, caur kuru ir iespējams pārbaudīt nosacījumus un veikt darbības.

Starpprogrammatūras izveide

Lai izveidotu jaunu starpprogrammatūru, mēs izpildām šādu komandu:

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

Mēs veidojam middleware un mēs to saucam CheckAge, artisan atbildēs mums šādi:

Augšējais logs parāda, ka starpprogrammatūra ir veiksmīgi izveidota ar nosaukumu ” Pārbaudīt vecumu ".

Lai redzētu, vai CheckAge starpprogrammatūra ir izveidota vai nē, dodieties uz projektu mapē app/Http/Middleware, un jūs redzēsit jaunizveidoto failu.

Jaunizveidotajam failam ir šāds kods

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

Izmantojiet starpprogrammatūru

Lai izmantotu starpprogrammatūru, mums tā ir jāreģistrē.

Laravel ir divu veidu starpprogrammatūra:

  • Middleware globale
  • Route Middleware

Il globālā starpprogrammatūra tiks izpildīts uz katru HTTP pieprasījumu no lietojumprogrammas, kamēr Maršruta starpprogrammatūra tiks piešķirts noteiktam ceļam. Starpprogrammatūru var reģistrēt vietnē app/Http/Kernel.php. Šajā failā ir divi rekvizīti $starpprogrammatūra e $routeMiddleware . $middleware īpašums tiek izmantots, lai reģistrētu globālu starpprogrammatūru un īpašumtiesības $routeMiddleware tiek izmantots, lai reģistrētu maršrutam specifisku starpprogrammatūru.

Lai reģistrētu globālo starpprogrammatūru, rekvizīta $middleware beigās norādiet klasi.

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

Lai reģistrētu maršrutam specifisku starpprogrammatūru, rekvizītam $routeMiddleware pievienojiet atslēgu un vērtību.

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

Mēs radījām Pārbaudīt vecumu iepriekšējā piemērā. Tagad mēs to varam reģistrēt starpprogrammatūras maršruta rekvizītā. Šādas reģistrācijas kods ir parādīts zemāk.

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

Starpprogrammatūras parametri

Mēs varam arī nodot parametrus ar starpprogrammatūru. 

Piemēram, ja jūsu lietojumprogrammai ir dažādas lomas, piemēram, lietotājs, administrators, galvenais administrators utt. un vēlaties autentificēt darbību, pamatojoties uz lomu, varat to izdarīt, nododot parametrus ar starpprogrammatūru. 

Mūsu izveidotā starpprogrammatūra satur šādu funkciju, un pēc argumenta mēs varam nodot pielāgotus argumentus $nākamais .

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

Tagad mēģināsim iestatīt lomas parametru jaunai starpprogrammatūrai, kuru mēs izveidosim no nulles, un pēc tam turpināsim izveidot lomu starpprogrammatūru, izpildot šādu komandu

Mainiet roktura metodi šādi

<?php

namespace App\Http\Middleware;
use Closure;

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

mēs pievienojām parametru $role, un metodes iekšpusē līnija echo lai izvadā uzrakstītu lomas nosaukumu.

Inovāciju biļetens
Nepalaidiet garām svarīgākās ziņas par jauninājumiem. Reģistrējieties, lai tos saņemtu pa e-pastu.

Tagad reģistrēsim RoleMiddleware starpprogrammatūru konkrētam ceļam

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

Tagad, lai pārbaudītu starpprogrammatūru ar parametru, mums ir jāizveido pieprasījums un atbilde. Lai simulētu atbildi, izveidosim kontrolieri, ko sauksim par TestController

php artisan make:controller TestController --plain

tikko izpildītā komanda mapē izveidos jaunu kontrolleri app/Http/TestController.phpun mainiet metodi index ar līniju 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.";
   }
}

Pēc atbildes iestatīšanas mēs izveidojam pieprasījumu, rediģējot failu routes.phppievienojot route role

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

šajā brīdī mēs varam izmēģināt piemēru, apmeklējot URL http://localhost:8000/role

un pārlūkprogrammā mēs redzēsim abus echo

Role editor
Test Controller

Izbeidzama starpprogrammatūra

Il terminable Middleware veic dažus uzdevumus pēc tam, kad atbilde ir nosūtīta pārlūkprogrammai. To var panākt, izveidojot starpprogrammatūru ar metodi pārtraukt starpprogrammatūrā. Il terminable Middleware jābūt reģistrētam middleware globāli. Metode terminate saņems divus argumentus $pieprasījums e $atbilde. 

Metode Terminate ir jāizveido, kā parādīts nākamajā kodā.

php artisan make:middleware TerminateMiddleware

Kad starpprogrammatūra ir izveidota app/Http/Middleware/TerminateMiddleware.php modificēsim kodu šādi

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

šajā gadījumā mums ir metode handle un metode terminate ar diviem parametriem $request e $response.

Tagad reģistrēsim starpprogrammatūru

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

Tagad mums ir jāizveido kontrolieris, lai simulētu atbildi

php artisan make:controller XYZController --plain

klases satura modificēšana

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

Tagad mums ir jārediģē fails routes/web.php pievienojot pieprasījuma aktivizēšanai nepieciešamos maršrutus

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

šajā brīdī mēs varam izmēģināt piemēru, apmeklējot URL http://localhost:8000/terminate

un pārlūkprogrammā mēs redzēsim šādas rindas

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

Ercole Palmeri

Jums varētu patikt arī:

Inovāciju biļetens
Nepalaidiet garām svarīgākās ziņas par jauninājumiem. Reģistrējieties, lai tos saņemtu pa e-pastu.

Jaunākie Raksti

Interfeisa segregācijas princips (ISP), ceturtais SOLID princips

Interfeisa segregācijas princips ir viens no pieciem objektorientētā dizaina SOLIDA principiem. Klasei vajadzētu būt…

14 maijā 2024

Kā vislabāk kārtot datus un formulas programmā Excel, lai iegūtu kvalitatīvu analīzi

Microsoft Excel ir atsauces rīks datu analīzei, jo tas piedāvā daudzas iespējas datu kopu organizēšanai,…

14 maijā 2024

Pozitīvs secinājums diviem svarīgiem Walliance Equity kopfinansēšanas projektiem: Jesolo Wave Island un Milano Via Ravenna

Walliance, SIM un platforma starp līderiem Eiropā nekustamo īpašumu kopfinansēšanas jomā kopš 2017. gada, paziņo par…

13 maijā 2024

Kas ir kvēldiegs un kā lietot Laravel pavedienu

Filament ir "paātrināta" Laravel izstrādes sistēma, kas nodrošina vairākus pilnus komponentus. Tas ir paredzēts, lai vienkāršotu procesu…

13 maijā 2024

Mākslīgā intelekta kontrolē

«Man ir jāatgriežas, lai pabeigtu savu evolūciju: es projicēšu sevi datorā un kļūšu par tīru enerģiju. Kad apmetās…

10 maijā 2024

Google jaunais mākslīgais intelekts var modelēt DNS, RNS un "visas dzīvības molekulas"

Google DeepMind ievieš uzlabotu sava mākslīgā intelekta modeļa versiju. Jaunais uzlabotais modelis nodrošina ne tikai…

9 maijā 2024

Laravela moduļu arhitektūras izpēte

Laravel, kas slavena ar savu eleganto sintaksi un jaudīgām funkcijām, nodrošina arī stabilu pamatu moduļu arhitektūrai. Tur…

9 maijā 2024

Cisco Hypershield un Splunk iegāde Sākas jaunais drošības laikmets

Cisco un Splunk palīdz klientiem paātrināt viņu ceļu uz nākotnes drošības operāciju centru (SOC), izmantojot…

8 maijā 2024