qusaihomadi / laravel-architect
Artisan generators for Action + Service + DTO + Repository pattern in Laravel
Requires
- php: ^8.1
- illuminate/console: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/database: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0|^13.0
README
باكج مميز واحترافي من تطوير Qusai Homadi يضيف لك أوامر Artisan ذكية لتوليد بنية برمجية متكاملة ونظيفة تناسب نمط DDD والنظام المعماري متعدد الطبقات: Repository + Interface/Abstract Class, Service, DTO, Action بضغطة زر.
🚀 طريقة التثبيت (Installation)
بما أن الباكج منشورة بشكل رسمي على Packagist، لتثبيتها في أي مشروع جديد استخدم أمر composer require:
composer require qusaihomadi/laravel-architect
Note
استخدم دائماً composer require للتثبيت أول مرة في مشروع جديد. (أمر composer update يُستخدم فقط لاحقاً للتحديث عند صدور إصدارات جديدة من الباكج).
Tip
الباكج تدعم ميزة الـ Package Auto-Discovery في Laravel 11 و 12 و 13، لذلك سيتم تسجيلها وتفعيل الأوامر تلقائياً بمجرد التنزيل!
خيارات النشر والتخصيص (اختياري):
-
نشر ملف الإعدادات للتحكم بالمسارات والـ Namespaces:
php artisan vendor:publish --tag=laravel-architect-config
سيتم إنشاء ملف الإعدادات في
config/laravel-architect.php. يمكنك تعديله لتخصيص مجلدات الحفظ حسب هيكلة مشروعك. -
نشر ملفات الـ stubs لتعديل قوالب الأكواد المولدة:
php artisan vendor:publish --tag=laravel-architect-stubs
بعد النشر، ستجد القوالب في
stubs/vendor/laravel-architect/لتتمكن من التعديل عليها وتخصيصها.
🛠️ الأوامر والاختصارات المتوفرة (Commands & Aliases)
تسهيلاً للكتابة، يمكنك استدعاء الأوامر بأسمائها الكاملة أو بالاختصارات المخصصة:
| الأمر الكامل | الاختصارات المتاحة | الوصف |
|---|---|---|
php artisan make:repository |
make:repo | make:rep |
توليد الـ Repository + الكلاس الأب الخاص به |
php artisan make:service |
توليد كلاس الـ Service مع حقن الـ Repository تلقائياً | |
php artisan make:dto |
توليد كلاس الـ DTO (ذكي ومبني على الموديل) | |
php artisan make:action |
توليد كلاس Action مخصص (Single Action) | |
php artisan make:module |
توليد الوحدة كاملة لكيان معين (كل الطبقات معاً) بأمر واحد |
🌟 الميزات الجبارة والمتقدمة (Advanced Features)
1️⃣ التوليد التفاعلي للمستودعات (Interface vs Abstract Class)
عند تشغيل أمر توليد المستودع (مثلاً: php artisan make:repo Post)، سيسألك المعالج تفاعلياً في الـ Terminal عن النمط الذي تفضله:
- Interface-based: توليد Interface وكلاس Repository يقوم بتنفيذه.
- Abstract Class-based: توليد كلاس تجريدي (Abstract Class) وكلاس Repository يرث منه.
Tip
ميزة الذكاء في السيرفس: عند توليد الـ Service لاحقاً، ستقوم الباكج تلقائياً بالتحقق مما إذا كان المستودع عبارة عن Interface أو Abstract Class، وتقوم بحقن الكلاس الأب الصحيح تلقائياً في Constructor الخاص بالسيرفس!
2️⃣ الربط التلقائي الحديث لـ Laravel 11 (#[Bind] Attribute)
إذا اخترت نمط الـ Interface أثناء توليد المستودع، تقوم الباكج تلقائياً باستدعاء الخاصية الذكية لـ Laravel 11 ووضعها فوق واجهة المستودع بالشكل التالي:
use Illuminate\Container\Attributes\Bind; use App\Repositories\PostRepository; #[Bind(PostRepository::class)] interface PostRepositoryInterface { // ... }
بفضل هذا الـ Attribute، سيقوم Laravel بربط الواجهة بـ Repository الخاص بها أوتوماتيكياً بمجرد حقنها في أي كود، دون الحاجة لكتابة أي كود تسجيل يدوياً داخل ملف AppServiceProvider!
3️⃣ توليد الـ DTO الديناميكي المعتمد على الموديل (Dynamic DTOs)
عند توليد DTO لكيان ما (مثال: php artisan make:dto User)، سيبحث المولد عن موديل User في مشروعك، ويقوم بـ:
-
قراءة الأعمدة المعرفة في مصفوفة الحقول القابلة للتعبئة
$fillable. -
استنتاج نوع كل خاصية تلقائياً من مصفوفة الـ
$casts(مثلboolean->bool,datetime->Carbon, إلخ) وجعلها nullable للأمان. -
تحويل أسماء الخصائص لـ
camelCaseلتناسب المعايير النظيفة. -
إنشاء دوال تحويل مساعدة كاملة تلقائياً:
fromModel(),fromArray(),fromRequest(),toArray(). -
ملاحظة: في حال عدم وجود موديل للكيان بعد، سيتراجع المولد تلقائياً وينشئ كلاس DTO افتراضي نظيف لتتمكن من تعبئته بنفسك دون أي مشاكل أو توقف.
4️⃣ دعم المسارات والمجلدات الفرعية (Subdirectories Support)
الأوامر تدعم توليد الملفات داخل مجلدات فرعية مع تعديل الـ namespaces بشكل سليم وآمن تماماً، مثال:
php artisan make:repo Admin/Post php artisan make:service User/AuthService
سيتم تنظيم الملفات برمجياً وإنشاء مجلدات Admin و User تلقائياً مع ضبط الـ namespaces المطابق لهيكلة المجلدات.
📝 رخصة الباكج (License)
تخضع هذه الباكج لرخصة MIT المفتوحة والمتاحة للاستخدام والتطوير المجاني.