Ứng dụng đa nhiệm

Đôi khi một dự án có thể chia thành nhiều dự án con, ví dụ, một cửa hàng có thể chia thành ba dự án con bao gồm: dự án chính của cửa hàng, giao diện lập trình ứng dụng (API) của cửa hàng và trang quản trị của cửa hàng. Tất cả họ đều sử dụng cấu hình cơ sở dữ liệu giống nhau.

webman cho phép bạn lên kế hoạch thư mục ứng dụng như sau:

app
├── shop
│   ├── controller
│   ├── model
│   └── view
├── api
│   ├── controller
│   └── model
└── admin
    ├── controller
    ├── model
    └── view

Khi truy cập vào địa chỉ http://127.0.0.1:8787/shop/{controller}/{method} thì truy cập vào các điều khiển và phương thức trong app/shop/controller.

Khi truy cập vào địa chỉ http://127.0.0.1:8787/api/{controller}/{method} thì truy cập vào các điều khiển và phương thức trong app/api/controller.

Khi truy cập vào địa chỉ http://127.0.0.1:8787/admin/{controller}/{method} thì truy cập vào các điều khiển và phương thức trong app/admin/controller.

Trong webman, thậm chí bạn có thể lên kế hoạch thư mục ứng dụng như sau:

app
├── controller
├── model
├── view
│
├── api
│   ├── controller
│   └── model
└── admin
    ├── controller
    ├── model
    └── view

Khi truy cập vào địa chỉ http://127.0.0.1:8787/{controller}/{method} thì truy cập vào các điều khiển và phương thức trong app/controller. Khi đường dẫn bắt đầu với api hoặc admin thì truy cập vào các điều khiển và phương thức trong thư mục tương ứng.

Trong trường hợp nhiều ứng dụng, không gian tên lớp của các lớp cần phù hợp với psr4, ví dụ như tệp app/api/controller/FooController.php sẽ có nội dung tương tự như sau:

<?php
namespace app\api\controller;

use support\Request;

class FooController
{

}

Cấu hình tiền xử lý đa ứng dụng

Đôi khi bạn muốn cấu hình các tiền xử lý khác nhau cho các ứng dụng khác nhau, ví dụ như ứng dụng api có thể cần một tiền xử lý chuyển tiếp (middleware) còn admin cần một tiền xử lý kiểm tra đăng nhập quản trị viên. Trong trường hợp này, tệp cấu hình config/midlleware.php có thể giống như sau:

return [
    // Tiền xử lý toàn cầu
    '' => [
        support\middleware\AuthCheck::class,
    ],
    // Tiền xử lý cho ứng dụng api
    'api' => [
         support\middleware\AccessControl::class,
     ],
    // Tiền xử lý cho ứng dụng admin
    'admin' => [
         support\middleware\AdminAuthCheck::class,
         support\middleware\SomeOtherClass::class,
    ],
];

Các tiền xử lý ở trên có thể không tồn tại, đây chỉ là ví dụ để mô tả cách cấu hình tiền xử lý theo từng ứng dụng

Thứ tự thực hiện của các tiền xử lý là Tiền xử lý toàn cầu -> Tiền xử lý ứng dụng.

Tài liệu phát triển tiền xử lý xem tại Chương tiền xử lý

Cấu hình xử lý ngoại lệ đa ứng dụng

Tương tự, bạn muốn cấu hình các lớp xử lý ngoại lệ khác nhau cho từng ứng dụng, ví dụ như khi có ngoại lệ xảy ra trong ứng dụng shop, bạn có thể muốn cung cấp một trang thông báo thân thiện; trong ứng dụng api, bạn có thể muốn trả về một chuỗi json thay vì một trang. Tệp cấu hình xử lý ngoại lệ cho từng ứng dụng config/exception.php có thể giống như sau:

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

Khác với tiền xử lý, mỗi ứng dụng chỉ có thể cấu hình một lớp xử lý ngoại lệ.

Các lớp xử lý ngoại lệ ở trên có thể không tồn tại, đây chỉ là ví dụ để mô tả cách cấu hình xử lý ngoại lệ theo từng ứng dụng
Tài liệu phát triển xử lý ngoại lệ xem tại Chương xử lý ngoại lệ