מאמרים

תוכנת האמצע של Laravel איך זה עובד

תוכנת האמצע של Laravel היא שכבת יישום ביניים שמתערבת בין בקשת המשתמש לתגובת האפליקציה.

המשמעות היא שכאשר המשתמש (תצוגת Laravel) מגיש בקשה לשרת (בקר Laravel), הבקשה תעבור דרך תוכנת האמצע. כך תוכנת התווך יכולה לבדוק אם הבקשה מאומתת או לא: 

  • אם בקשת המשתמש מאומתת, הבקשה נשלחת ל-backend;
  • אם בקשת המשתמש אינה מאומתת, תוכנת האמצע תפנה את המשתמש למסך הכניסה.

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

אולי תרצה גם:

ניוזלטר חדשנות
אל תחמיצו את החדשות החשובות ביותר בנושא חדשנות. הירשם כדי לקבל אותם במייל.

מאמרים אחרונים

עיקרון הפרדת ממשק (ISP), עקרון SOLID רביעי

עקרון הפרדת הממשק הוא אחד מחמשת העקרונות המוצקים של עיצוב מונחה עצמים. לכיתה צריכה להיות…

14 מאי 2024

כיצד לארגן בצורה הטובה ביותר נתונים ונוסחאות באקסל, לניתוח מוצלח

Microsoft Excel הוא כלי ההתייחסות לניתוח נתונים, מכיוון שהוא מציע תכונות רבות לארגון מערכי נתונים,...

14 מאי 2024

מסקנה חיובית לשני פרויקטים חשובים של Walliance Equity Crowdfunding: Jesolo Wave Island ו-Milano Via Ravenna

Walliance, SIM ופלטפורמה בין המובילות באירופה בתחום מימון המונים בנדל"ן מאז 2017, מכריזה על השלמת...

13 מאי 2024

מהו פילאמנט וכיצד להשתמש ב-Laravel Filament

Filament הוא מסגרת פיתוח "מואצת" של Laravel, המספקת מספר רכיבים מלאים. זה נועד לפשט את התהליך של...

13 מאי 2024

תחת שליטה של ​​בינה מלאכותית

"אני חייב לחזור כדי להשלים את האבולוציה שלי: אני אשליך את עצמי בתוך המחשב ואהפוך לאנרגיה טהורה. לאחר שהתמקמו…

10 מאי 2024

הבינה המלאכותית החדשה של גוגל יכולה לדגמן DNA, RNA ו"כל מולקולות החיים"

Google DeepMind מציגה גרסה משופרת של מודל הבינה המלאכותית שלה. הדגם החדש המשופר מספק לא רק...

9 מאי 2024

חקר האדריכלות המודולרית של לראוול

Laravel, המפורסמת בתחביר האלגנטי והתכונות החזקות שלו, מספקת גם בסיס איתן לארכיטקטורה מודולרית. שם…

9 מאי 2024

Cisco Hypershield ורכישת Splunk העידן החדש של אבטחה מתחיל

סיסקו ו-Splunk עוזרות ללקוחות להאיץ את המסע שלהם אל מרכז התפעול האבטחה (SOC) של העתיד עם...

8 מאי 2024