Αυτό σημαίνει ότι όταν ο χρήστης (προβολή Laravel) κάνει ένα αίτημα στον διακομιστή (ελεγκτής Laravel), το αίτημα θα περάσει από το ενδιάμεσο λογισμικό. Με αυτόν τον τρόπο το ενδιάμεσο λογισμικό μπορεί να ελέγξει εάν το αίτημα έχει επικυρωθεί ή όχι:
Η 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.
Για παράδειγμα, εάν η εφαρμογή σας έχει διαφορετικούς ρόλους όπως χρήστης, διαχειριστής, σούπερ διαχειριστής κ.λπ. και θέλετε να ελέγξετε την ταυτότητα της ενέργειας με βάση το ρόλο, μπορείτε να το κάνετε περνώντας τις παραμέτρους με το ενδιάμεσο λογισμικό.
Το ενδιάμεσο λογισμικό που δημιουργήσαμε περιέχει την ακόλουθη συνάρτηση και μπορούμε να περάσουμε προσαρμοσμένα ορίσματα μετά το όρισμα $επόμενο .
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
για να γράψετε στην έξοδο το όνομα του ρόλου.
Τώρα ας καταχωρήσουμε το ενδιάμεσο λογισμικό 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
Ίσως θέλετε επίσης:
Η βρετανική CMA εξέδωσε προειδοποίηση σχετικά με τη συμπεριφορά της Big Tech στην αγορά τεχνητής νοημοσύνης. Εκεί…
Το διάταγμα «Case Green», που διατυπώθηκε από την Ευρωπαϊκή Ένωση για τη βελτίωση της ενεργειακής απόδοσης των κτιρίων, ολοκλήρωσε τη νομοθετική του διαδικασία με…
Παρουσιάστηκε η ετήσια έκθεση της Casaleggio Associati για το ηλεκτρονικό εμπόριο στην Ιταλία. Έκθεση με τίτλο «AI-Commerce: τα σύνορα του ηλεκτρονικού εμπορίου με την τεχνητή νοημοσύνη».…
Αποτέλεσμα συνεχούς τεχνολογικής καινοτομίας και δέσμευσης για το περιβάλλον και την ευημερία των ανθρώπων. Η Bandalux παρουσιάζει το Airpure®, μια σκηνή…