🔄 دورة حياة الطلب
كل طلب يبدأ من index.php
- تعريف الثوابت (
ROOT،APP،CONFIG) - تحميل الدوال المساعدة
- التحقق مما إذا كان مثبتاً (هل ملف
config/database.phpموجود؟) - إذا لم يكن مثبتاً → إعادة التوجيه إلى
/install/ - تحميل تكوين قاعدة البيانات + المساعدات، بدء الجلسة
- حساب مسار الطلب (يتعامل مع التثبيت في المجلدات الفرعية)
- التوجيه عبر
app/router.php
الموجه
app/router.php هو جدول توجيه مسطح لمطابقة الأنماط. يتم تجميع الأنماط إلى تعبيرات نمطية ومطابقتها مع مسار الطلب. يتم تمرير مجموعات الالتقاط كوسائط لطريقة المتحكم.
المصادقة
تستدعي معظم المتحكمات require_auth() التي تعيد توجيه المستخدمين غير المصادق عليهم إلى /login. تستخدم نقاط النهاية المخصصة للمسؤولين require_admin() التي تُرجع JSON 403.
يتم ملء الجلسات عند تسجيل الدخول بـ user_id، workspace_id، role، ويتم تجديدها لمنع تثبيت الجلسة.
اتصال قاعدة البيانات
يتم إنشاء اتصال PDO بشكل كسول عند أول استعلام (singleton). يستخدم ERRMODE_EXCEPTION وعبارات محضرة حقيقية (EMULATE_PREPARES = false).
صيغ الاستجابة
- صفحات HTML: يحدد المتحكم
$pageويتضمنlayout.php - واجهات JSON:
json_response()يحدد Content-Type، يطبع JSON، وينهي - تدفق SSE: حلقة مستمرة مع
text/event-stream، ping كل ثانيتين، تنتهي بعد 55 ثانية