Featured image of post ما الفرق بين طريقتي register() و boot() في ServiceProvider في Laravel، وكيف يمكن استخدامهما وفي أي سيناريوهات؟

ما الفرق بين طريقتي register() و boot() في ServiceProvider في Laravel، وكيف يمكن استخدامهما وفي أي سيناريوهات؟

ما الفرق بين طريقتي register() و boot() في ServiceProvider في Laravel، وكيف يمكن استخدامهما وفي أي سيناريوهات؟

مقارنة بين طريقتي register() و boot()

في ServiceProvider في Laravel، يكمن الفرق الرئيسي بين طريقتي register() و boot() في توقيت التنفيذ والغرض منهما.

register() boot()
الشرح تُستخدم لربط الخدمات بحاوية الخدمات (service container). تُستخدم لتنفيذ العمليات التي تعتمد على الخدمات المسجلة بالفعل.
توقيت التنفيذ يتم تنفيذها قبل تسجيل جميع مزودي الخدمة. يتم تنفيذها بعد اكتمال تسجيل جميع مزودي الخدمة.
الاستخدام الرئيسي تسجيل الروابط (bindings)، المفردات (singletons)، الخدمات، إلخ. تسجيل مستمعي الأحداث (event listeners)، المسارات (routes)، توجيهات Blade، إلخ.
ملاحظة لا ينبغي استخدام خدمات من مزودي خدمة آخرين، حيث ربما لم يتم تسجيلهم بعد. يمكن استخدام خدمات من مزودي خدمة آخرين بأمان.

أمثلة على سيناريوهات الاستخدام

استخدام register()

public function register()
{
 $this->app->bind('App\Contracts\SomeService', 'App\Services\SomeService');
}

في هذا المثال، نربط واجهة (interface) بتنفيذ ملموس (concrete implementation)، مما يضمن إمكانية استخدامها في جميع أنحاء التطبيق.

استخدام boot()

public function boot()
{
 \Event::listen('event.name', function ($data) {
 // التعامل مع الحدث
 });
}

هنا، نقوم بتسجيل مستمع للحدث في طريقة boot()، مما يضمن توفر جميع التبعيات اللازمة.

الخاتمة

تركز طريقة register() على الربط، بينما تُستخدم طريقة boot() لتنفيذ العمليات التي تعتمد على خدمات أخرى مسجلة بالفعل.

عند تطوير تطبيقات Laravel، يمكن أن يؤدي استخدام هاتين الطريقتين بشكل صحيح إلى تحسين قابلية الصيانة واستقرار الكود.

Reference

All rights reserved,未經允許不得隨意轉載
مبني بستخدام Hugo
قالب Stack مصمم من Jimmy