بضائع

برمجية Laravel الوسيطة كيف تعمل

برمجية Laravel الوسيطة هي طبقة تطبيق وسيطة تتدخل بين طلب المستخدم واستجابة التطبيق.

هذا يعني أنه عندما يطلب المستخدم (طريقة عرض Laravel) للخادم (وحدة تحكم Laravel) ، فإن الطلب يمر عبر البرنامج الوسيط. بهذه الطريقة يمكن للبرمجيات الوسيطة التحقق مما إذا كان الطلب مصادقًا أم لا: 

  • في حالة مصادقة طلب المستخدم ، يتم إرسال الطلب إلى الواجهة الخلفية ؛
  • إذا كان طلب المستخدم غير مصدق عليه ، فستقوم البرامج الوسيطة بإعادة توجيه المستخدم إلى شاشة تسجيل الدخول.

يسمح لك Laravel بذلك defiإنهاء واستخدام البرامج الوسيطة الإضافية لأداء مجموعة متنوعة من المهام باستثناء المصادقة. 

توجد برامج Laravel الوسيطة ، مثل المصادقة وحماية CSRF ، في الدليل app / Http / Middleware .

لذلك يمكننا القول أن البرامج الوسيطة هي عامل تصفية لطلب http ، والذي من خلاله يمكن التحقق من الشروط وتنفيذ الإجراءات.

إنشاء برمجيات وسيطة

لإنشاء برمجية وسيطة جديدة نقوم بتشغيل الأمر التالي:

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

نقوم بإنشاء ملف middleware ونحن نسميها CheckAge, artisan سوف يجيبنا على النحو التالي:

توضح النافذة أعلاه أن البرنامج الوسيط قد تم إنشاؤه بنجاح بالاسم " تحقق من العمر ".

لمعرفة ما إذا تم إنشاء البرنامج الوسيط 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 من التطبيق ، بينما الطريق الوسيطة سيتم تعيين مسار محدد. يمكن تسجيل البرامج الوسيطة في app / Http / Kernel.php. يحتوي هذا الملف على خاصيتين الوسيطة $ e $ routeMiddleware . الخاصية الوسيطة $ يستخدم لتسجيل البرامج الوسيطة العالمية والملكية $ 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,
    ];

لقد أنشأنا تحقق من العمر في المثال السابق. يمكننا الآن تسجيل هذا في خاصية مسار البرامج الوسيطة. يظهر رمز مثل هذا التسجيل أدناه.

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

في هذه المرحلة يمكننا تجربة المثال من خلال زيارة URL 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',
]);

في هذه المرحلة يمكننا تجربة المثال من خلال زيارة URL http://localhost:8000/terminate

وفي المتصفح سنرى الأسطر التالية

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

Ercole Palmeri

قد تكون مهتمة أيضا في:

النشرة الإخبارية
لا تفوّت أهم أخبار الابتكار. قم بالتسجيل لتلقيهم عن طريق البريد الإلكتروني.

المقالات الأخيرة

يتميز Veeam بالدعم الأكثر شمولاً لبرامج الفدية، بدءًا من الحماية وحتى الاستجابة والاسترداد

سوف تستمر شركة Coveware by Veeam في تقديم خدمات الاستجابة لحوادث الابتزاز السيبراني. ستوفر Coveware إمكانات الطب الشرعي والمعالجة...

أبريل 23 2024

الثورة الخضراء والرقمية: كيف تعمل الصيانة التنبؤية على تغيير صناعة النفط والغاز

تُحدث الصيانة التنبؤية ثورة في قطاع النفط والغاز، من خلال اتباع نهج مبتكر واستباقي لإدارة المحطات.

أبريل 22 2024

منظم مكافحة الاحتكار في المملكة المتحدة يثير إنذار BigTech بشأن GenAI

أصدرت هيئة أسواق المال في المملكة المتحدة تحذيرًا بشأن سلوك شركات التكنولوجيا الكبرى في سوق الذكاء الاصطناعي. هناك…

أبريل 18 2024

كازا جرين: ثورة الطاقة من أجل مستقبل مستدام في إيطاليا

اختتم مرسوم "البيوت الخضراء"، الذي صاغه الاتحاد الأوروبي لتعزيز كفاءة استخدام الطاقة في المباني، عمليته التشريعية مع…

أبريل 18 2024

اقرأ الابتكار بلغتك

النشرة الإخبارية
لا تفوّت أهم أخبار الابتكار. قم بالتسجيل لتلقيهم عن طريق البريد الإلكتروني.

تابعنا