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

إزاي تبني حزم لارايفيل (Custom Laravel Packages) وتوفر على نفسك وقت ومجهود؟

إزاي تبني حزم لارايفيل (Custom Laravel Packages) وتوفر على نفسك وقت ومجهود؟ بتلاقي نفسك دايماً بتعيد كتابة نفس الـ Logic أو الـ Helpers في كل مشروع لارايفيل (La

إزاي تبني حزم لارايفيل (Custom Laravel Packages) وتوفر على نفسك وقت ومجهود؟
Reading Count: 3

إزاي تبني حزم لارايفيل (Custom Laravel Packages) وتوفر على نفسك وقت ومجهود؟

بتلاقي نفسك دايماً بتعيد كتابة نفس الـ Logic أو الـ Helpers في كل مشروع لارايفيل (Laravel) جديد؟ سواء كنت بتعمل نظام دفع معين، أو بتظبط الـ Authentication بطريقة خاصة بيك، أو حتى شوية أدوات بتسهل التعامل مع الـ API؟ الموضوع ده بيبقى ممل جداً وبيخليك تحس إنك بتعيد اختراع العجلة. النهاردة هعرفك إزاي تاخد "الكود المتكرر" ده وتحوله لـ حزمة لارايفيل خاصة بيك (Custom Package) تقدر تستخدمها في أي مشروع تاني بمجرد أمر واحد!

يعني إيه Laravel Package أصلاً؟

ببساطة، الحزمة (Package) هي طريقة لتجميع الكود بتاعك في مكان واحد، منفصل عن المشروع الأساسي. الحزمة دي تقدر تكون عبارة عن Functions، Classes، Views، أو حتى Migrations. الميزة العظيمة هنا إنك بتنقل الكود ده من مشروع لمشروع من غير ما تعمل Copy-Paste، وده بيخلي الـ Maintainability بتاع كودك في حتة تانية خالص.

الخطوة الأولى: هيكلة الحزمة (Package Structure)

أول حاجة محتاجين نجهز ملفاتنا. يفضل إنك تنشئ فولدر جديد بره مشروع لارايفيل بتاعك أو داخل فولدر اسمه packages. الهيكل الأساسي لازم يحتوي على:

  • src: ده القلب بتاع الحزمة، فيه كل الكود بتاعك.
  • composer.json: الملف اللي بيعرف الحزمة وبيدير الـ Dependencies.
  • ServiceProvider: ده "المخ" اللي بيربط الحزمة بـ إطار العمل (Framework).

في ملف الـ composer.json، لازم تضيف الـ Namespace الخاص بيك عشان الـ Autoloading يشتغل صح:


{
    "name": "yourname/package-name",
    "autoload": {
        "psr-4": {
            "YourName\\PackageName\\": "src/"
        }
    }
}

الخطوة التانية: دور الـ Service Provider (قلب الحزمة)

الـ Service Provider هو المسؤول عن إخبار لارايفيل إن فيه "حزمة" وصلت. جوا الميثود boot، بنعرف لارايفيل بمكان الـ Routes أو الـ Views أو الـ Migrations:


public function boot()
{
    $this->loadRoutesFrom(__DIR__.'/../routes/web.php');
    $this->loadViewsFrom(__DIR__.'/../resources/views', 'package-name');
}

الخطوة التالتة: ربط الحزمة بمشروعك محلياً (Local Development)

قبل ما تنشر الحزمة، لازم تجربها. بدل ما ترفعها على الإنترنت وتعدل، استخدم خاصية الـ Path في الـ composer.json بتاع مشروعك الأساسي:


"repositories": [
    {
        "type": "path",
        "url": "../packages/your-package-name"
    }
],
"require": {
    "yourname/package-name": "dev-main"
}

وبعدين نفذ composer update، ومبروك عليك! التعديلات اللي هتعملها في فولدر الحزمة هتسمع فوراً في مشروعك.

الخطوة الرابعة: النشر على Packagist (أرشفة الكود)

عشان الحزمة تكون احترافية، ارفع الكود بتاعك على GitHub، وبعدين ادخل على موقع Packagist، اعمل حساب، واعمل Submit لـ رابط الـ Repository بتاعك. وبمجرد ما الحزمة تتقبل، أي حد (أو أي مشروع ليك) يقدر ينزلها بـ composer require yourname/package-name.

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

تطوير الحزم مش بس عشان توفر وقت، ده تمرين ممتاز عشان تفهم الـ Core بتاع لارايفيل بيشتغل إزاي. ابدأ بحاجات صغيرة، Helper Class بسيط، وبعدين كبر الموضوع. وأهم حاجة، اهتم بالـ Testing (اختبارات الكود) عشان تضمن إن حزمتك مش هتكسر مشاريع الناس أو حتى مشروعك الشخصي مستقبلاً. الاستمرار في بناء أدواتك الخاصة هو اللي بيفرق بين "المبرمج الموظف" و"المهندس المحترف".


Share

Related posts

Jun 27, 2026 • 1 min read
Reading Count: 10
ثورة الـ Signals في جافا سكريبت: إزاي تدير بياناتك باحترافية من غير فريم وورك؟

ثورة الـ Signals في جافا سكريبت: إزاي تدير بياناتك باحترافية من غير فريم وورك؟ لو كنت مبرمج ويب، أكي...

Jun 27, 2026 • 1 min read
Reading Count: 12
تشغيل الذكاء الاصطناعي محلياً في المتصفح باستخدام WebGPU و Transformers.js

تشغيل الذكاء الاصطناعي محلياً في المتصفح باستخدام WebGPU و Transformers.js كثير مننا كمطورين ويب واج...

Jun 26, 2026 • 1 min read
Reading Count: 13
دليلك الشامل لفهم وحل مشاكل Hydration Errors في Next.js

دليلك الشامل لفهم وحل مشاكل Hydration Errors في Next.js أكيد مريت بالموقف ده قبل كده: بتفتح الكونسول...