فهم معمارية Laravel 12 وأنماط MVC
الوحدة 1: معمارية Laravel وأنماط MVC
في هذه الوحدة، سنستعرض البنية الداخلية لتطبيقات Laravel وكيفية تنظيم الكود باستخدام نمط تصميم MVC (Model-View-Controller). سنفهم كيف يتم تدفق الطلب من المستخدم حتى عرض الصفحة، وكيف يعمل حاوية الخدمات (Service Container) لتسهيل إدارة التبعيات.
أهداف هذه الوحدة
- فهم البنية العامة لمجلدات مشروع Laravel.
- معرفة دورة حياة الطلب (Request Lifecycle) من Route إلى View.
- التعرف على أساسيات حاوية الخدمات (Service Container) وحقن التبعيات (Dependency Injection).
- تنفيذ تطبيق بسيط يمر عبر جميع مراحل نمط MVC.
المحتوى التعليمي
1. بنية مجلدات مشروع Laravel
عند إنشاء مشروع Laravel جديد، ستجد مجموعة من المجلدات التي تحتوي على أجزاء مختلفة من التطبيق. إليك أهمها:
المجلد | الوصف |
---|---|
app/ | يحتوي على النوى الأساسية للتطبيق مثل Controllers، Models، Providers، وغيرها. |
routes/ | يحتوي على ملفات التوجيه (Routing) مثل web.php وapi.php . |
resources/ | يحتوي على ملفات العرض (Views)، ملفات CSS/JS، واللغات. |
config/ | يحتوي على ملفات الإعدادات العامة للتطبيق. |
database/ | يحتوي على المigrations، seeders، وfactories. |
storage/ | يحتوي على ملفات التخزين المؤقت، السجلات (logs)، والملفات المرفوعة. |
public/ | المجلد الجذري الذي يتم الوصول إليه عبر المتصفح. |
2. دورة حياة الطلب (Request Lifecycle)
عندما يقوم المستخدم بإرسال طلب إلى تطبيق Laravel، يتم تنفيذ الخطوات التالية:
- الطلب يدخل عبر نقطة الدخول (
public/index.php
). - يتم تحميل التطبيق باستخدام
bootstrap/app.php
. - يتم تحديد المسار المناسب من ملفات التوجيه (
routes/web.php
). - يتم تنفيذ Controller المحدد في المسار.
- يتم إرجاع View أو JSON response.
3. نمط MVC في Laravel
نمط MVC هو نمط تصميم يُستخدم لفصل منطق التطبيق إلى ثلاثة أجزاء رئيسية:
العنصر | الوظيفة | الموقع في Laravel |
---|---|---|
Model | يمثل البيانات وقواعد العمل عليها. | app/Models/ |
View | عرض البيانات للمستخدم. | resources/views/ |
Controller | يستقبل الطلب ويتحكم في تنفيذ المنطق. | app/Http/Controllers/ |
4. حاوية الخدمات (Service Container)
الـ Service Container هو قلب نظام Laravel، ويقوم بإدارة التبعيات (Dependencies) وحقنها تلقائيًا في الكائنات عند الحاجة.
حقن التبعيات (Dependency Injection)
class UserController extends Controller
{
public function __construct(protected UserService $userService)
{
// سيتم حقن الكائن تلقائيًا من قبل Service Container
}
public function index()
{
return $this->userService->getAllUsers();
}
}
الحل التلقائي (Auto-Resolution)
يمكن لـ Laravel أن يحل التبعيات تلقائيًا من خلال تحليل النوع في مُنشئ الكائن (Constructor).
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
نصائح مهمة
- أظهر أهمية حقن التبعيات منذ البداية لتحسين اختبار الكود وصيانته.
- اشرح كيف تقوم حاوية الخدمات بحل الكائنات تلقائيًا بناءً على نوعها.
- شجع الطلاب على استخدام Controllers بدلًا من كتابة المنطق مباشرة في ملفات التوجيه.
التطبيق العملي
في هذا التطبيق، سنقوم بإنشاء مسار بسيط يعرض عبارة “مرحبًا بك في Laravel 12” ويمر عبر جميع مراحل نمط MVC.
الخطوات:
- أنشئ مسارًا في ملف
routes/web.php
:
use App\Http\Controllers\WelcomeController;
Route::get('/welcome', [WelcomeController::class, 'index']);
- أنشئ Controller باسم
WelcomeController
:
php artisan make:controller WelcomeController
- عدّل الدالة
index()
في Controller:
public function index()
{
return view('welcome');
}
- أنشئ ملف العرض
resources/views/welcome.blade.php
:
مرحبًا بك في Laravel 12
هذا أول تطبيق لك باستخدام نمط MVC.
- شغل الخادم وانتقل إلى الرابط:
php artisan serve
# ثم افتح http://127.0.0.1:8000/welcome
الملخص
في هذه الوحدة، تعلمنا كيف تتكون تطبيقات Laravel من عدة أجزاء منظمة ضمن نمط MVC. كما فهمنا كيف يتم تمرير الطلب من Route إلى Controller ثم إلى View، وكيف تسهم حاوية الخدمات في تسهيل إدارة التبعيات وتحسين جودة الكود.
التطبيق العملي الذي نفذناه يُظهر كيف يمكننا ربط جميع هذه العناصر معًا بسهولة، مما يمهد الطريق لبناء تطبيقات أكثر تعقيدًا في الوحدات القادمة.
اترك تعليقاً