I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

الدليل الشامل لاستخدام حقن الاعتماديات (Dependency Injection) في لارافيل (Laravel)

الدليل الشامل لاستخدام حقن الاعتماديات (Dependency Injection) في لارافيل (Laravel) أكيد مريت بالموقف ده: بتبني مشروع كبير، وبدأت الكود يكبر ويكبر، وفجأة لقيت نف

الدليل الشامل لاستخدام حقن الاعتماديات (Dependency Injection) في لارافيل (Laravel)
Reading Count: 7

الدليل الشامل لاستخدام حقن الاعتماديات (Dependency Injection) في لارافيل (Laravel)

أكيد مريت بالموقف ده: بتبني مشروع كبير، وبدأت الكود يكبر ويكبر، وفجأة لقيت نفسك بتكتب new ClassName() في كل مكان داخل الكنترولر (Controller). النتيجة؟ كود "مربوط" ببعضه (Coupled)، ولو حبيت تغير أي كلاس أو تعمل اختبار (Unit Testing)، بتلاقي نفسك في دوامة ومشاكل ملهاش أول من آخر. النهاردة هنتكلم عن الحل السحري اللي بيقدمه لارافيل (Laravel) وهو حقن الاعتماديات (Dependency Injection).

يعني إيه حقن الاعتماديات (Dependency Injection)؟

ببساطة، بدل ما الكلاس بتاعك هو اللي يروح "يخلق" الكلاس اللي محتاجه، إحنا بنخليه "يستلم" الكلاس ده جاهز من بره. ده بيخلي الكود بتاعك مرن جداً وسهل التعديل. في لارافيل، الـ (Service Container) هو "المدير" المسؤول عن العملية دي، هو اللي بيعرف إزاي يجهز الكلاسات بتاعتك ويحقنها في المكان الصح.

ليه محتاج تستخدم (Dependency Injection) في مشاريعك؟

  • سهولة الاختبار (Testability): تقدر تعمل (Mocking) لأي كلاس بسهولة.
  • فك الارتباط (Decoupling): الكلاسات مش معتمدة على تنفيذ كلاسات تانية بشكل مباشر.
  • تنظيم الكود (Clean Code): الكود بيبقى مقروء أكتر ومقسم لخدمات (Services).

طرق حقن الاعتماديات في لارافيل

1. حقن المُنشئ (Constructor Injection)

دي الطريقة الأشهر والأكثر استخداماً، وبنستخدمها لما نكون محتاجين الكلاس في أغلب ميثودات الكنترولر.


class UserController extends Controller {
    protected $userService;

    public function __construct(UserService $userService) {
        $this->userService = $userService;
    }
}

2. حقن الميثود (Method Injection)

لو الكلاس محتاجه في ميثود واحدة بس، مش محتاج تملأ الكونستراكتور، احقنه مباشرة في الميثود!


public function update(Request $request, User $user) {
    // لارافيل هيعرف لوحده ويحقن الـ Request والـ User
}

استخدام (Service Container) للتحكم في الاعتماديات

في المشاريع الكبيرة، ممكن تكون معتمد على (Interface) مش كلاس مباشر. هنا بييجي دور الـ (Service Provider) عشان تربط الـ Interface بالتنفيذ الخاص بيها (Implementation).


// داخل AppServiceProvider
$this->app->bind(PaymentInterface::class, StripePayment::class);

دلوقتي، لو طلبت الـ PaymentInterface في أي كنترولر، لارافيل تلقائياً هيحقن كلاس الـ StripePayment.

نصيحة من أخ لمبرمج محترف

يا صديقي، التعامل مع (Dependency Injection) في البداية ممكن يبان تقيل أو زيادة عن اللزوم (Overengineering)، لكن صدقني، لما تبدأ تكبر في مشروعك وتلاقي نفسك بتعدل في الـ (Service) من غير ما تلمس الكنترولر، هتحس بقيمة اللي بتعمله. نصيحتي ليك: ابدأ طبق الـ (Interface-based design) في كل الكود بتاعك، حتى لو المشروع صغير، عشان تعود إيدك على التنظيم. ده الفرق بين مبرمج بيعرف يكتب كود، ومبرمج بيبني نظام (System) قابل للاستدامة.

استمر في التعلم، والـ (Laravel Documentation) هو صديقك الصدوق، اقرأ أكتر عن الـ (Service Container) وهتلاقي أسرار تانية هتخلي حياتك أسهل بكتير!


Share

Related posts

Jul 20, 2026 • 1 min read
Reading Count: 10
إزاي تبني نظام سجل النشاط (Activity Log) في لارافيل زي المحترفين

إزاي تبني نظام سجل النشاط (Activity Log) في لارافيل زي المحترفين أكيد مريت بالموقف ده قبل كدة: مديرك...

Jul 19, 2026 • 1 min read
Reading Count: 17
أسرار استخدام Laravel Prompts لعمل أوامر Artisan تفاعلية ومميزة

أسرار استخدام Laravel Prompts لعمل أوامر Artisan تفاعلية ومميزة لو إنت شغال بـ Laravel ، أكيد قضيت س...

Jul 19, 2026 • 1 min read
Reading Count: 11
إعداد نظام تعدد المستأجرين (Multi-Tenancy) باستخدام حزمة Spatie و Laravel

إعداد نظام تعدد المستأجرين (Multi-Tenancy) باستخدام حزمة Spatie و Laravel أهلاً بك يا صديقي المبرمج....