إنتقل إلى المحتوى الرئيسي

الوحدات

يعرض قسم Super Admin → الوحدات حالة أي وحدات مخصصة مسجّلة في تثبيت LeadHub الخاص بك.

لا يأتي LeadHub مع وحدات ميزات مدمجة — نظام الوحدات هو نقطة توسعة للمطورين تتيح لك إضافة وظائف جديدة إلى المنصة دون التعديل على الكود الأساسي.


ما هو نظام الوحدات؟​

يستخدم LeadHub حزمة nWidart/laravel-modules لتطبيق بنية HMVC (Hierarchical Model-View-Controller).

تنظّم بنية HMVC الكود في وحدات مستقلة بذاتها، لكل منها مساراتها الخاصة والـ controllers والـ models والـ views والـ migrations ومزوّد الخدمة — وهي بالأساس تطبيق Laravel مصغّر يُحمَّل داخل التطبيق الرئيسي. هذا يعني:

  • يمكنك إضافة ميزات جديدة كليًا (أقسام واجهة مستخدم جديدة، نقاط نهاية API جديدة، مهام خلفية جديدة) دون تعديل الكود الأساسي.
  • يمكن تفعيل الوحدات أو تعطيلها في وقت التشغيل من لوحة Super Admin أو عبر modules_statuses.json.
  • كل وحدة لها إصدار مستقل ويمكنها الإعلان عن اعتمادياتها على وحدات أخرى.

التثبيت (مضمّن مسبقًا في LeadHub)​

الحزمة مثبّتة ومهيّأة بالفعل في LeadHub. للتحقق من ذلك:

composer show nwidart/laravel-modules

يوجد ملف إعداد الوحدات في config/modules.php، وتُخزَّن الوحدات في مجلد Modules/ في جذر المشروع.


إنشاء وحدتك الأولى​

# إنشاء وحدة جديدة
php artisan module:make MyFeature

# إنشاء عدة وحدات دفعة واحدة
php artisan module:make ModuleA ModuleB ModuleC

# إنشاء بدون ملفات النموذج الافتراضية (الحد الأدنى فقط)
php artisan module:make MyFeature --plain

بعد تشغيل module:make، تُنشأ وحدتك في Modules/MyFeature/ وتُسجَّل تلقائيًا.


الهيكل الافتراضي للوحدة​

Modules/
MyFeature/
app/
Http/
Controllers/ # Controllers الخاصة بالمسارات
Middleware/ # Middleware بنطاق الوحدة
Requests/ # فئات Form Request
Models/ # نماذج Eloquent
Providers/
MyFeatureServiceProvider.php # مزوّد الخدمة الرئيسي (يُحمَّل تلقائيًا)
RouteServiceProvider.php # يحمّل routes/web.php + routes/api.php
config/
config.php # إعدادات على مستوى الوحدة
database/
migrations/ # Migrations الوحدة (معزولة عن الأساسي)
seeders/
factories/
resources/
views/ # قوالب Blade
lang/ # سلاسل الترجمة
assets/ # JS/CSS (مجمَّعة عبر Vite)
routes/
web.php # مسارات الويب (محمّلة ضمن مجموعة middleware 'web')
api.php # مسارات API (محمّلة ضمن مجموعة middleware 'api')
tests/ # اختبارات وظيفية وحدوية
module.json # بيانات الوحدة والإعلان عن الاعتماديات
composer.json # التحميل التلقائي PSR-4 لفضاء أسماء هذه الوحدة

شرح الملفات الرئيسية​

module.json​

يعرّف هوية الوحدة وترتيب تحميلها:

{
"name": "MyFeature",
"alias": "myfeature",
"description": "Adds custom feature X to LeadHub",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\MyFeature\\Providers\\MyFeatureServiceProvider"
],
"requires": []
}
  • priority — يتحكم في ترتيب التحميل؛ الرقم الأصغر يُحمَّل أولًا. استخدمه عندما تعتمد وحدتك على وحدة أخرى.
  • requires — قائمة بأسماء مستعارة للوحدات التي تعتمد عليها هذه الوحدة. سيتحقق LeadHub من الاعتماديات قبل التحميل.

MyFeatureServiceProvider.php​

نقطة الدخول لوحدتك. سجّل هنا المسارات والـ middleware والـ views والترجمات والـ bindings. المزوّد المُنشأ تلقائيًا يستدعي RouteServiceProvider ويسجّل views وترجمات الوحدة تلقائيًا.

config/config.php​

إعدادات على مستوى الوحدة. يمكن الوصول إليها عبر:

config('myfeature.some_key');

انشر الإعدادات واستبدلها حسب البيئة باستخدام نشر الإعداد القياسي في Laravel.


مولّدات Artisan الشائعة​

# Controllers, Models, Migrations
php artisan module:make-controller MyController MyFeature
php artisan module:make-model MyModel MyFeature
php artisan module:make-migration create_my_table MyFeature

# Requests, Middleware, Policies
php artisan module:make-request StoreMyRequest MyFeature
php artisan module:make-middleware CheckSomething MyFeature
php artisan module:make-policy MyPolicy MyFeature

# Jobs, Events, Listeners, Mail
php artisan module:make-job ProcessSomething MyFeature
php artisan module:make-event SomethingHappened MyFeature
php artisan module:make-listener HandleSomething MyFeature
php artisan module:make-mail WelcomeMail MyFeature

# أوامر Artisan
php artisan module:make-command MyCommand MyFeature

تشغيل Migrations و Seeds​

تُحفظ migrations الوحدات بشكل منفصل عن الأساسي. شغّلها باستقلالية:

# ترحيل جميع الوحدات
php artisan module:migrate

# ترحيل وحدة محددة
php artisan module:migrate MyFeature

# التراجع
php artisan module:migrate-rollback MyFeature

# بذر البيانات
php artisan module:seed MyFeature

تفعيل الوحدات وتعطيلها​

من سطر الأوامر:

php artisan module:enable MyFeature
php artisan module:disable MyFeature
php artisan module:list # يعرض جميع الوحدات وحالتها

من Super Admin → الوحدات: استخدم زر التبديل بجانب كل وحدة مسجّلة.

تُحفظ حالة الوحدات في ملف modules_statuses.json في جذر المشروع — أضف هذا الملف إلى نظام التحكم في الإصدارات.


اعتبارات تعدد المستأجرين​

LeadHub متعدد المستأجرين. عند بناء الوحدات، ضع في اعتبارك:

  • Migrations بنطاق المستأجر: شغّل module:migrate داخل سياق المستأجر إذا كانت migration تنشئ جداول على مستوى المستأجر.
  • عزل مزوّد الخدمة: سجّل الـ middleware والـ policies ومستمعي الأحداث داخل مزوّد خدمة الوحدة لتجنب تلويث النطاق العام.
  • التحكم في الميزات: ادمج زر تفعيل/تعطيل الوحدة مع نظام الخطط في LeadHub — عطّل وحدة عالميًا أو اقصرها على مستويات خطط معينة.

ذات الصلة​