Nhiều ứng dụng

Đôi khi một dự án có thể chia thành nhiều dự án con, ví dụ như một trung tâm thương mại có thể chia thành ba dự án con: dự án chính của trung tâm thương mại, API trung tâm thương mại và trang quản trị trung tâm thương mại, tất cả đều sử dụng cấu hình cơ sở dữ liệu giống nhau.

webman cho phép bạn lập kế hoạch thư mục app như sau:

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

Khi truy cập địa chỉ http://127.0.0.1:8787/shop/{controller}/{method} thì sẽ gọi đến controller và method trong thư mục app/shop/controller.

Khi truy cập địa chỉ http://127.0.0.1:8787/api/{controller}/{method} thì sẽ gọi đến controller và method trong thư mục app/api/controller.

Khi truy cập địa chỉ http://127.0.0.1:8787/admin/{controller}/{method} thì sẽ gọi đến controller và method trong thư mục app/admin/controller.

Trong webman, bạn thậm chí có thể lập kế hoạch thư mục app như sau.

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

Vì vậy, khi địa chỉ truy cập http://127.0.0.1:8787/{controller}/{method} thì sẽ gọi đến controller và method trong thư mục app/controller. Khi đường dẫn bắt đầu bằng api hoặc admin, sẽ gọi đến controller và method trong thư mục tương ứng.

Trong trường hợp nhiều ứng dụng, namespace của lớp cần tuân theo psr4, ví dụ như tệp app/api/controller/FooController.php sẽ giống như sau:

<?php
namespace app\api\controller;

use support\Request;

class FooController
{

}

Cấu hình middleware cho nhiều ứng dụng

Đôi khi bạn muốn cấu hình các middleware 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 middleware cho phép truy cập跨域, trong khi admin cần một middleware kiểm tra đăng nhập quản trị viên, do đó cấu hình config/middleware.php có thể giống như sau:

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

Các middleware trên có thể không tồn tại, ở đây chỉ là ví dụ minh họa cách cấu hình middleware theo ứng dụng.

Thứ tự thực thi middleware là middleware toàn cầu -> middleware ứng dụng.

Tham khảo phát triển middleware tại Chương middleware

Cấu hình xử lý ngoại lệ cho nhiều ứ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 các ứng dụng khác nhau, ví dụ trong ứng dụng shop, khi xảy ra ngoại lệ, 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, khi xảy ra ngoại lệ, bạn có thể muốn trả về không phải là một trang mà là một chuỗi json. Cấu hình tệp cho các lớp xử lý ngoại lệ khác nhau cho các ứng dụng sẽ giống như sau trong config/exception.php:

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

Khác với middleware, 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ụ minh họa cách cấu hình xử lý ngoại lệ theo ứng dụng.

Tham khảo phát triển xử lý ngoại lệ tại Chương xử lý ngoại lệ