アプリケーションプラグインは、それぞれが完全なアプリケーションであり、ソースコードは{メインプロジェクト}/pluginディレクトリに配置されています。

ヒント
php webman app-plugin:create {プラグイン名}コマンド(webman/console>=1.2.16が必要)を使用すると、ローカルにアプリケーションプラグインを作成できます。
たとえば、 php webman app-plugin:create cms とすると、以下のディレクトリ構造が作成されます。

plugin/
└── cms
    ├── app
    │   ├── controller
    │   │   └── IndexController.php
    │   ├── exception
    │   │   └── Handler.php
    │   ├── functions.php
    │   ├── middleware
    │   ├── model
    │   └── view
    │       └── index
    │           └── index.html
    ├── config
    │   ├── app.php
    │   ├── autoload.php
    │   ├── container.php
    │   ├── database.php
    │   ├── exception.php
    │   ├── log.php
    │   ├── middleware.php
    │   ├── process.php
    │   ├── redis.php
    │   ├── route.php
    │   ├── static.php
    │   ├── thinkorm.php
    │   ├── translation.php
    │   └── view.php
    └── public

アプリケーションプラグインは、webmanと同じディレクトリ構造および構成ファイルを持っていることがわかります。実際には、アプリケーションプラグインを開発することは、基本的にwebmanプロジェクトを開発することと同じような体験であり、以下のいくつかの側面に注意するだけです。

名前空間

プラグインディレクトリおよび名前付けはPSR4規格に従います。プラグインはすべてpluginディレクトリに配置されているため、名前空間はすべてpluginから始まります。例えば plugin\cms\app\controller\UserControllerのようなものです。ここでcmsはプラグインのソースコードの主ディレクトリです。

URLアクセス

アプリケーションプラグインのURLパスは常に/appで始まります。例えばplugin\cms\app\controller\UserControllerのURLは http://127.0.0.1:8787/app/cms/user です。

静的ファイル

静的ファイルはplugin/{プラグイン}/publicに配置されます。例えばhttp://127.0.0.1:8787/app/cms/avatar.pngにアクセスする場合は、実際にはplugin/cms/public/avatar.pngファイルが取得されます。

設定ファイル

プラグインの設定は通常のwebmanプロジェクトと同じですが、プラグインの設定は通常、そのプラグインにのみ影響します。たとえば、plugin.cms.app.controller_suffixの値は通常、プラグインのコントローラのサフィックスにのみ影響し、メインプロジェクトには影響しません。
例えば、plugin.cms.middlewareの値は通常、プラグインのミドルウェアにのみ影響し、メインプロジェクトには影響しません。
しかし、ルートはグローバルであるため、プラグインの設定されたルートも影響を受けます。

設定の取得

あるプラグインの設定を取得するには、config('plugin.{プラグイン}.{具体的な設定}');のようにします。たとえば、plugin/cms/config/app.phpのすべての設定を取得するにはconfig('plugin.cms.app')となります。
同様に、メインプロジェクトや他のプラグインもconfig('plugin.cms.xxx')を使用して、cmsプラグインの設定を取得できます。

サポートされていない設定

アプリケーションプラグインではserver.phpsession.phpの設定はサポートされていません。app.request_classapp.public_pathapp.runtime_pathの設定もサポートされていません。

データベース

プラグインは独自のデータベースを設定できます。たとえば、plugin/cms/config/database.phpの内容は以下のようになります。

return  [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [ // mysqlが接続名です
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'データベース名',
            'username'    => 'ユーザー名',
            'password'    => 'パスワード',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
        'admin' => [ // adminが接続名です
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'データベース名',
            'username'    => 'ユーザー名',
            'password'    => 'パスワード',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
    ],
];

参照方法はDb::connection('plugin.{プラグイン}.{接続名}');です。例えば

use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();

メインプロジェクトのデータベースを使用したい場合は、そのまま使用します。

use support\Db;
Db::table('user')->first();
// 仮にメインプロジェクトにadmin接続がある場合
Db::connection('admin')->table('admin')->first();

ヒント
thinkormも同様の使い方です

Redis

Redisの使用方法もデータベースと同様です。例えば plugin/cms/config/redis.php

return [
    'default' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 0,
    ],
    'cache' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 1,
    ],
];

使用方法は次のようになります

use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');

同様に、メインプロジェクトのRedis設定を再利用したい場合は、そのまま使用します。

use support\Redis;
Redis::get('key');
// 仮にメインプロジェクトにcache接続がある場合
Redis::connection('cache')->get('key');

ログ

ログクラスの使用方法もデータベースの使用方法と類似しています。

use support\Log;
Log::channel('plugin.admin.default')->info('テスト');

メインプロジェクトのログ設定を再利用したい場合は、そのまま使用します。

use support\Log;
Log::info('ログ内容');
// 仮にメインプロジェクトにテストログ設定がある場合
Log::channel('test')->info('ログ内容');

アプリケーションプラグインのインストールとアンインストール

アプリケーションプラグインをインストールするには、プラグインディレクトリを{メインプロジェクト}/pluginディレクトリにコピーするだけです。再読み込みまたは再起動が必要です。
アンインストールする際には、単純に{メインプロジェクト}/pluginディレクトリから対応するプラグインディレクトリを削除するだけです。