εμπορεύματα

Laravel middleware πώς λειτουργεί

Το ενδιάμεσο λογισμικό Laravel είναι ένα ενδιάμεσο επίπεδο εφαρμογής που παρεμβαίνει μεταξύ του αιτήματος του χρήστη και της απάντησης της εφαρμογής.

Αυτό σημαίνει ότι όταν ο χρήστης (προβολή Laravel) κάνει ένα αίτημα στον διακομιστή (ελεγκτής Laravel), το αίτημα θα περάσει από το ενδιάμεσο λογισμικό. Με αυτόν τον τρόπο το ενδιάμεσο λογισμικό μπορεί να ελέγξει εάν το αίτημα έχει επικυρωθεί ή όχι: 

  • Εάν το αίτημα του χρήστη είναι πιστοποιημένο, το αίτημα αποστέλλεται στο backend.
  • Εάν το αίτημα του χρήστη δεν έχει πιστοποιηθεί, το ενδιάμεσο λογισμικό θα ανακατευθύνει τον χρήστη στην οθόνη σύνδεσης.

Η Laravel σας το επιτρέπει defiολοκληρώστε και χρησιμοποιήστε πρόσθετο ενδιάμεσο λογισμικό για την εκτέλεση ποικίλων εργασιών εκτός από τον έλεγχο ταυτότητας. 

Τα ενδιάμεσα προγράμματα Laravel, όπως ο έλεγχος ταυτότητας και η προστασία CSRF, βρίσκονται στον κατάλογο app/Http/Middleware .

Μπορούμε λοιπόν να πούμε ότι το ενδιάμεσο λογισμικό είναι ένα φίλτρο αιτήματος http, μέσω του οποίου είναι δυνατή η επαλήθευση συνθηκών και η εκτέλεση ενεργειών.

Δημιουργία ενδιάμεσου λογισμικού

Για να δημιουργήσουμε ένα νέο ενδιάμεσο λογισμικό εκτελούμε την ακόλουθη εντολή:

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

Δημιουργούμε το middleware και το λέμε CheckAge, artisan θα μας απαντήσει ως εξής:

Το παραπάνω παράθυρο δείχνει ότι το ενδιάμεσο λογισμικό δημιουργήθηκε με επιτυχία με το όνομα " CheckAge ".

Για να δείτε εάν το ενδιάμεσο λογισμικό CheckAge έχει δημιουργηθεί ή όχι, μεταβείτε στο έργο στον φάκελο app/Http/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);
    }
}

Χρησιμοποιήστε ενδιάμεσο λογισμικό

Για να χρησιμοποιήσουμε το ενδιάμεσο λογισμικό, πρέπει να το καταχωρήσουμε.

Υπάρχουν δύο τύποι ενδιάμεσου λογισμικού στο Laravel:

  • Middleware globale
  • Route Middleware

Il παγκόσμιο ενδιάμεσο λογισμικό θα εκτελείται σε κάθε αίτημα HTTP από την εφαρμογή, ενώ το Route Middleware θα εκχωρηθεί σε μια συγκεκριμένη διαδρομή. Το Middleware μπορεί να εγγραφεί στο app/Http/Kernel.php. Αυτό το αρχείο περιέχει δύο ιδιότητες $μεσαίο λογισμικό e $routeMiddleware . Η ιδιότητα $middleware χρησιμοποιείται για την καταχώρηση παγκόσμιου ενδιάμεσου λογισμικού και ιδιοκτησίας $routeMiddleware χρησιμοποιείται για την καταχώρηση ενδιάμεσου λογισμικού για συγκεκριμένη διαδρομή.

Για να καταχωρήσετε παγκόσμιο ενδιάμεσο λογισμικό, καταχωρίστε την κλάση στο τέλος της ιδιότητας $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,
    ];

Για να καταχωρήσετε ενδιάμεσο λογισμικό για συγκεκριμένη διαδρομή, προσθέστε το κλειδί και την τιμή στην ιδιότητα $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,
    ];

Παράμετροι Middleware

Μπορούμε επίσης να περάσουμε παραμέτρους με το Middleware. 

Για παράδειγμα, εάν η εφαρμογή σας έχει διαφορετικούς ρόλους όπως χρήστης, διαχειριστής, σούπερ διαχειριστής κ.λπ. και θέλετε να ελέγξετε την ταυτότητα της ενέργειας με βάση το ρόλο, μπορείτε να το κάνετε περνώντας τις παραμέτρους με το ενδιάμεσο λογισμικό. 

Το ενδιάμεσο λογισμικό που δημιουργήσαμε περιέχει την ακόλουθη συνάρτηση και μπορούμε να περάσουμε προσαρμοσμένα ορίσματα μετά το όρισμα $επόμενο .

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

Τώρα ας προσπαθήσουμε να ορίσουμε την παράμετρο ρόλου σε ένα νέο ενδιάμεσο λογισμικό που πρόκειται να δημιουργήσουμε από την αρχή και, στη συνέχεια, προχωρήστε στη δημιουργία Role Middleware εκτελώντας την ακόλουθη εντολή

Τροποποιήστε τη μέθοδο χειρισμού ως εξής

<?php

namespace App\Http\Middleware;
use Closure;

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

προσθέσαμε την παράμετρο $role, και μέσα στη μέθοδο τη γραμμή echo για να γράψετε στην έξοδο το όνομα του ρόλου.

Ενημερωτικό δελτίο καινοτομίας
Μην χάσετε τα πιο σημαντικά νέα για την καινοτομία. Εγγραφείτε για να τα λάβετε μέσω email.

Τώρα ας καταχωρήσουμε το ενδιάμεσο λογισμικό RoleMiddleware για μια συγκεκριμένη διαδρομή

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

σε αυτό το σημείο μπορούμε να δοκιμάσουμε το παράδειγμα επισκεπτόμενοι τη διεύθυνση URL http://localhost:8000/role

και στον browser θα δούμε τα δύο echo

Role editor
Test Controller

Ενδιάμεσο λογισμικό με τερματικό

Il terminable Middleware εκτελεί ορισμένες εργασίες μετά την αποστολή της απάντησης στο πρόγραμμα περιήγησης. Αυτό μπορεί να επιτευχθεί δημιουργώντας ένα ενδιάμεσο λογισμικό με τη μέθοδο τερματίζουν στο ενδιάμεσο λογισμικό. Il terminable Middleware πρέπει να εγγραφεί στο middleware παγκόσμια. Η μέθοδος terminate θα λάβει δύο επιχειρήματα $αίτημα e $response. 

Η μέθοδος 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.

Τώρα ας καταχωρήσουμε το 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,
    ];

Τώρα πρέπει να δημιουργήσουμε τον ελεγκτή για την προσομοίωση της απόκρισης

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

σε αυτό το σημείο μπορούμε να δοκιμάσουμε το παράδειγμα επισκεπτόμενοι τη διεύθυνση URL http://localhost:8000/terminate

και στον browser θα δούμε τις παρακάτω γραμμές

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

Ercole Palmeri

Ίσως θέλετε επίσης:

Ενημερωτικό δελτίο καινοτομίας
Μην χάσετε τα πιο σημαντικά νέα για την καινοτομία. Εγγραφείτε για να τα λάβετε μέσω email.

Πρόσφατα άρθρα

Η ρυθμιστική αρχή αντιμονοπωλιακής νομοθεσίας του Ηνωμένου Βασιλείου εγείρει συναγερμό της BigTech για το GenAI

Η βρετανική CMA εξέδωσε προειδοποίηση σχετικά με τη συμπεριφορά της Big Tech στην αγορά τεχνητής νοημοσύνης. Εκεί…

Απρίλιος 18 2024

Casa Green: ενεργειακή επανάσταση για ένα βιώσιμο μέλλον στην Ιταλία

Το διάταγμα «Case Green», που διατυπώθηκε από την Ευρωπαϊκή Ένωση για τη βελτίωση της ενεργειακής απόδοσης των κτιρίων, ολοκλήρωσε τη νομοθετική του διαδικασία με…

Απρίλιος 18 2024

Το ηλεκτρονικό εμπόριο στην Ιταλία στο +27% σύμφωνα με τη νέα Έκθεση της Casaleggio Associati

Παρουσιάστηκε η ετήσια έκθεση της Casaleggio Associati για το ηλεκτρονικό εμπόριο στην Ιταλία. Έκθεση με τίτλο «AI-Commerce: τα σύνορα του ηλεκτρονικού εμπορίου με την τεχνητή νοημοσύνη».…

Απρίλιος 17 2024

Εξαιρετική ιδέα: Η Bandalux παρουσιάζει το Airpure®, την κουρτίνα που καθαρίζει τον αέρα

Αποτέλεσμα συνεχούς τεχνολογικής καινοτομίας και δέσμευσης για το περιβάλλον και την ευημερία των ανθρώπων. Η Bandalux παρουσιάζει το Airpure®, μια σκηνή…

Απρίλιος 12 2024

Διαβάστε την Καινοτομία στη γλώσσα σας

Ενημερωτικό δελτίο καινοτομίας
Μην χάσετε τα πιο σημαντικά νέα για την καινοτομία. Εγγραφείτε για να τα λάβετε μέσω email.

Seguici