マルチアプリケーション
時には、プロジェクトが複数のサブプロジェクトに分かれることがあります。例えば、ショッピングモールは主にショッピングモールプロジェクト、ショッピングモールAPIインターフェイス、ショッピングモール管理バックエンドの3つのサブプロジェクトに分かれますが、これらは同じデータベース設定を使用します。
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ディレクトリを計画することもできます。
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,
];
ミドルウェアとは異なり、各アプリケーションには1つの例外処理クラスしか設定できません。
上記の例外処理クラスは存在しない可能性があります。ここではアプリケーションに応じて例外処理を設定する方法を説明するための例です。
例外処理の開発についての参考は例外処理章を確認してください。