マルチアプリケーション

プロジェクトが複数のサブプロジェクトに分かれることがあります。たとえば、ショッピングモールはショッピングモールのメインプロジェクト、ショッピングモールのAPIインターフェース、管理画面の3つのサブプロジェクトに分かれる場合があります。これらはすべて同じデータベース設定を使用します。

webmanでは、以下のようにappディレクトリをプランニングできます。

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

http://127.0.0.1:8787/shop/{controller}/{method}のアドレスにアクセスすると、app/shop/controller内のコントローラーとメソッドにアクセスします。

http://127.0.0.1:8787/api/{controller}/{method}のアドレスにアクセスすると、app/api/controller内のコントローラーとメソッドにアクセスします。

http://127.0.0.1:8787/admin/{controller}/{method}のアドレスにアクセスすると、app/admin/controller内のコントローラーとメソッドにアクセスします。

さらに、webmanでは以下のようにappディレクトリをプランニングできます。

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

このようにすると、http://127.0.0.1:8787/{controller}/{method}にアクセスすると、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つの例外処理クラスしか設定できません。

上記の例外処理クラスは実在しない場合があります。ここではアプリケーションごとに例外処理クラスをどのように設定するかを例示しています。

例外処理については、例外処理セクションを参照してください。