تطبيقات متعددة
في بعض الأحيان قد ينقسم المشروع إلى عدة مشاريع فرعية، على سبيل المثال قد ينقسم المركز التجاري إلى المشروع الرئيسي للمركز التجاري وواجهة API للمركز التجاري ولوحة إدارة المركز التجاري كثلاثة مشاريع فرعية، وكلها تستخدم نفس إعدادات قاعدة البيانات.
يتيح لك webman تخطيط مجلد app بالطريقة التالية:
app
├── shop
│ ├── controller
│ ├── model
│ └── view
├── api
│ ├── controller
│ └── model
└── admin
├── controller
├── model
└── view
عند الوصول إلى العنوان http://127.0.0.1:8787/shop/{وحدة التحكم}/{الطريقة} يتم الوصول إلى وحدة التحكم والطريقة الموجودة في app/shop/controller.
عند الوصول إلى العنوان http://127.0.0.1:8787/api/{وحدة التحكم}/{الطريقة} يتم الوصول إلى وحدة التحكم والطريقة الموجودة في app/api/controller.
عند الوصول إلى العنوان http://127.0.0.1:8787/admin/{وحدة التحكم}/{الطريقة} يتم الوصول إلى وحدة التحكم والطريقة الموجودة في app/admin/controller.
في webman، يمكن اعتبار كل مجلد تحت app على أنه تطبيق مستقل.
في webman، يمكنك حتى تخطيط مجلد app بالطريقة التالية:
app
├── controller
├── model
├── view
│
├── api
│ ├── controller
│ └── model
└── admin
├── controller
├── model
└── view
بهذه الطريقة عند الوصول إلى العنوان http://127.0.0.1:8787/{وحدة التحكم}/{الطريقة} يتم الوصول إلى وحدة التحكم والطريقة الموجودة في app/controller. وعندما يبدأ المسار بـ api أو admin يتم الوصول إلى وحدة التحكم والطريقة الموجودة في المجلد المقابل.
في حالة التطبيقات المتعددة، يجب أن يتوافق مساحة الاسم الخاصة بالكلاس مع psr4، على سبيل المثال ملف app/api/controller/FooController.php يكون على النحو التالي:
<?php
namespace app\api\controller;
use support\Request;
class FooController
{
}
تكوين الوسيط للتطبيقات المتعددة
في بعض الأحيان قد ترغب في تكوين وسائط مختلفة للتطبيقات المختلفة، على سبيل المثال قد يحتاج تطبيق api إلى وسيط للتحكم في الوصول عبر النطاقات، وقد يحتاج تطبيق admin إلى وسيط للتحقق من تسجيل دخول المسؤول. في هذه الحالة قد تكون إعدادات config/middleware.php كالتالي:
return [
// الوسيط العام
'' => [
support\middleware\AuthCheck::class,
],
// وسيط تطبيق api
'api' => [
support\middleware\AccessControl::class,
],
// وسيط تطبيق admin
'admin' => [
support\middleware\AdminAuthCheck::class,
support\middleware\SomeOtherClass::class,
],
];
الوسائط المذكورة أعلاه قد لا تكون موجودة، وهنا هي مجرد أمثلة لشرح كيفية تكوين الوسائط حسب التطبيق
ترتيب تنفيذ الوسائط هو الوسيط العام->وسيط التطبيق.
للاطلاع على تطوير الوسائط راجع فصل الوسائط
تكوين معالجة الاستثناءات للتطبيقات المتعددة
وبالمثل، قد ترغب في تكوين فئات معالجة استثناءات مختلفة للتطبيقات المختلفة، على سبيل المثال عند حدوث استثناء في تطبيق shop قد ترغب في عرض صفحة تلميح ودي؛ وعند حدوث استثناء في تطبيق api قد ترغب في إرجاع سلسلة JSON بدلاً من صفحة. إعدادات الملف config/exception.php لتكوين فئات معالجة استثناءات مختلفة للتطبيقات المختلفة تكون كالتالي:
return [
'shop' => support\exception\Handler::class,
'api' => support\exception\ApiHandler::class,
];
بخلاف الوسائط، لا يمكن لكل تطبيق تكوين سوى فئة معالجة استثناءات واحدة.
فئات معالجة الاستثناءات المذكورة أعلاه قد لا تكون موجودة، وهنا هي مجرد أمثلة لشرح كيفية تكوين معالجة الاستثناءات حسب التطبيق.
للاطلاع على تطوير معالجة الاستثناءات راجع فصل معالجة الاستثناءات