لطالما لعبت "Service Providers" دورًا هامًا في إطار عمل Laravel، حيث تُستخدم لتسجيل الخدمات والربطات والوظائف الإضافية مع النظام. في Laravel 11، شهدت "Service Providers" تغييرات جذرية أدت إلى تبسيطها بشكل كبير وجعلها أكثر سهولة في الاستخدام. سيتناول هذا المقال هذه التغييرات بالتفصيل، موضحًا فوائدها وكيفية استخدامها في Laravel 11.
في Laravel 10، تُنشأ "Service Providers" ككلاسات داخل المجلد app/Providers. تحتوي هذه الكلاسات على طريقتين أساسيتين: register و boot. تُستخدم طريقة register لتسجيل الخدمات والربطات مع حاوية الخدمات (Service Container). أما طريقة boot فتُستخدم لتشغيل أي وظائف إضافية بعد اكتمال تحميل إطار العمل.
في Laravel 11، تم تبسيط "Service Providers" بشكل كبير من خلال:
لإنشاء Service Provider جديد في Laravel 11، استخدم الأمر التالي:
php artisan make:provider TestServiceProvider INFO Provider [app/Providers/TestServiceProvider.php] created successfully.
سيقوم هذا الأمر بإنشاء ملف TestServiceProvider.php داخل المجلد app/Providers.
يتم تسجيل Service Providers بشكل تلقائي في ملف bootstrap/providers.php.
<?php return [ App\Providers\AppServiceProvider::class, ];
كما نلاحظ أنه عند إنشاء provider جديد في Laravel 11 او إضافة provider في Laravel 11 فإنه يجب عمل register بداخل المملف providers.php الموجود بداخل المجلد bootstrap، بينما في Laravel 10 كنا نقوم بتسجيل الـ provider بداخل config/app، ولو ألقينا نظره على الملف config/app.php نلاحظ عدم وجود المصفوفة providers، حيث تم نقل تسجيل الـ providers إلى bootstrap/providers.php
مع الإنتباه أنه أي provider يتم إنشاؤه من خلال command يتم تسجيله بشكل مباشر.
الأن يتم إنشاء TestServiceProvider.php بداخل المجلد app/providers، وكذلك يتم تسجيله بشكل تلقائي في bootstrap/providers.php
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class TestServiceProvider extends ServiceProvider { /** * Register services. */ public function register(): void { // } /** * Bootstrap services. */ public function boot(): void { // } }
وكذلك تسجيله في bootstrap/providers.php
return [ App\Providers\AppServiceProvider::class, App\Providers\TestServiceProvider::class, ];
أما إذا تم إنشاء provider بشكل يدوي، فإنه يجب علينا الذهاب إلى الملف bootstrap/providers.php