המשמעות היא שכאשר המשתמש (תצוגת Laravel) מגיש בקשה לשרת (בקר Laravel), הבקשה תעבור דרך תוכנת האמצע. כך תוכנת התווך יכולה לבדוק אם הבקשה מאומתת או לא:
Laravel מאפשר לך defiלסיים ולהשתמש בתוכנת ביניים נוספת לביצוע מגוון משימות מלבד אימות.
תוכנות הביניים של Laravel, כגון אימות והגנת CSRF, ממוקמות בספרייה אפליקציה/Http/תוכנה בינונית .
לכן אפשר לומר שהתווך הוא מסנן http request, שדרכו ניתן לאמת תנאים ולבצע פעולות.
כדי ליצור תווך חדש אנו מפעילים את הפקודה הבאה:
php artisan make:middleware <name-of-middleware>
אנחנו יוצרים את middleware
ואנחנו קוראים לזה CheckAge
, artisan
יענה לנו כך:
החלון שלמעלה מראה שתוכנת הביניים נוצרה בהצלחה עם השם " CheckAge
כדי לראות אם תוכנת האמצע של CheckAge נוצרה או לא, עבור לפרויקט בתיקיית האפליקציה/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 מהאפליקציה, בעוד ש- מסלול 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);
}
כעת ננסה להגדיר את פרמטר התפקיד לתווך חדש שאנו הולכים ליצור מאפס, ולאחר מכן נמשיך ליצירת תוכנת התפקיד על ידי הפעלת הפקודה הבאה
שנה את שיטת הידית כדלקמן
<?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',
]);
בשלב זה נוכל לנסות את הדוגמה על ידי ביקור בכתובת האתר http://localhost:8000/role
ובדפדפן נראה את השניים echo
Role editor
Test Controller
Il terminable Middleware
מבצע כמה משימות לאחר שליחת התגובה לדפדפן. ניתן להשיג זאת על ידי יצירת תוכנת ביניים בשיטה להסתיים בתוכנת האמצע. Il terminable Middleware
חייב להיות רשום ב- middleware
גלוֹבָּלִי. השיטה terminate
יקבל שני טיעונים $ בקשה e תגובה $.
השיטה 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
.
עכשיו בואו נרשום את התוכנה
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',
]);
בשלב זה נוכל לנסות את הדוגמה על ידי ביקור בכתובת האתר http://localhost:8000/terminate
ובדפדפן נראה את השורות הבאות
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
אולי תרצה גם:
עקרון הפרדת הממשק הוא אחד מחמשת העקרונות המוצקים של עיצוב מונחה עצמים. לכיתה צריכה להיות…
Microsoft Excel הוא כלי ההתייחסות לניתוח נתונים, מכיוון שהוא מציע תכונות רבות לארגון מערכי נתונים,...
Walliance, SIM ופלטפורמה בין המובילות באירופה בתחום מימון המונים בנדל"ן מאז 2017, מכריזה על השלמת...
Filament הוא מסגרת פיתוח "מואצת" של Laravel, המספקת מספר רכיבים מלאים. זה נועד לפשט את התהליך של...
"אני חייב לחזור כדי להשלים את האבולוציה שלי: אני אשליך את עצמי בתוך המחשב ואהפוך לאנרגיה טהורה. לאחר שהתמקמו…
Google DeepMind מציגה גרסה משופרת של מודל הבינה המלאכותית שלה. הדגם החדש המשופר מספק לא רק...
Laravel, המפורסמת בתחביר האלגנטי והתכונות החזקות שלו, מספקת גם בסיס איתן לארכיטקטורה מודולרית. שם…
סיסקו ו-Splunk עוזרות ללקוחות להאיץ את המסע שלהם אל מרכז התפעול האבטחה (SOC) של העתיד עם...