تطبيقات متعددة

في بعض الأحيان قد يتقسم المشروع إلى عدة مشاريع فرعية، على سبيل المثال، قد يتم تقسيم متجر إلى مشروع المتجر الرئيسي، واجهة برمجة تطبيقات المتجر، ونظام إدارة المتجر، وكلها تستخدم نفس إعدادات قاعدة البيانات.

تسمح لك Webman بتخطيط دليل التطبيقات الخاص بك على النحو التالي:

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
├── 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
{

}

إعدادات Middleware لتطبيقات متعددة

أحيانًا ترغب في إعداد Middleware مختلف للتطبيقات المختلفة، على سبيل المثال، قد يحتاج تطبيق api إلى Middleware للتحكم في الوصول، في حين يحتاج admin إلى Middleware للتحقق من تسجيل دخول المسؤول، لذا قد يبدو إعداد config/midlleware.php كما يلي:

return [
    // Middleware عالمي
    '' => [
        support\middleware\AuthCheck::class,
    ],
    // Middleware لتطبيق api
    'api' => [
         support\middleware\AccessControl::class,
     ],
    // Middleware لتطبيق admin
    'admin' => [
         support\middleware\AdminAuthCheck::class,
         support\middleware\SomeOtherClass::class,
    ],
];

قد لا تتوفر Middleware المذكورة أعلاه، فهذا فقط كمثال يوضح كيفية إعداد Middleware لكل تطبيق.

ترتيب تنفيذ Middleware هو Middleware عالمي -> Middleware للتطبيق.

للمزيد من المعلومات حول تطوير Middleware، يرجى الرجوع إلى فصل Middleware

إعدادات معالجة الاستثناءات لتطبيقات متعددة

بنفس الطريقة، قد ترغب في إعداد فئات معالجة استثناءات مختلفة للتطبيقات المختلفة، على سبيل المثال، إذا حدث استثناء في تطبيق shop، قد ترغب في تقديم صفحة رسالة ودية؛ أما إذا حدث استثناء في تطبيق api، فقد ترغب في إعادة JSON بدلاً من صفحة. سيبدو ملف إعداد فئات معالجة الاستثناءات للتطبيقات المختلفة config/exception.php كما يلي:

return [
    'shop' => support\exception\Handler::class,
    'api' => support\exception\ApiHandler::class,
];

على عكس Middleware، يمكن لكل تطبيق تكوين فئة معالجة استثناء واحدة فقط.

قد لا تتوفر فئة معالجة الاستثناءات المذكورة أعلاه، فهذا فقط كمثال يوضح كيفية إعداد معالجة الاستثناءات لكل تطبيق.

للمزيد من المعلومات حول تطوير معالجة الاستثناءات، يرجى الرجوع إلى فصل معالجة الاستثناءات