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

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

يسمح لك 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
{

}

تكوين وسيط التطبيقات المتعددة

في بعض الأحيان قد ترغب في تكوين وسيط مختلف لكل تطبيق، على سبيل المثال، قد يحتاج تطبيق api إلى وسيط لعبور الموارد المتعددة، ويحتاج admin إلى وسيط لفحص تسجيل الدخول للمشرف. عندئذٍ قد يكون تكوين ملف config/midlleware.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,
];

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

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

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