هذا يعني أنه عندما يطلب المستخدم (طريقة عرض 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
قد تكون مهتمة أيضا في:
سوف تستمر شركة Coveware by Veeam في تقديم خدمات الاستجابة لحوادث الابتزاز السيبراني. ستوفر Coveware إمكانات الطب الشرعي والمعالجة...
تُحدث الصيانة التنبؤية ثورة في قطاع النفط والغاز، من خلال اتباع نهج مبتكر واستباقي لإدارة المحطات.
أصدرت هيئة أسواق المال في المملكة المتحدة تحذيرًا بشأن سلوك شركات التكنولوجيا الكبرى في سوق الذكاء الاصطناعي. هناك…
اختتم مرسوم "البيوت الخضراء"، الذي صاغه الاتحاد الأوروبي لتعزيز كفاءة استخدام الطاقة في المباني، عمليته التشريعية مع…