アプリケーションプラグイン
各アプリケーションプラグインは完全なアプリケーションであり、ソースコードは{メインプロジェクト}/plugin
ディレクトリに配置されます。
ヒント
コマンドphp webman app-plugin:create {プラグイン名}
を使用すると、ローカルでアプリケーションプラグインを作成できます。
例えば、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.app.controller_reuse
の値はプラグインがコントローラを再利用するかどうかにのみ影響し、メインプロジェクトには影響しません。
例えば、plugin.cms.middleware
の値はプラグインのミドルウェアにのみ影響し、メインプロジェクトには影響しません。
例えば、plugin.cms.view
の値はプラグインが使用するビューにのみ影響し、メインプロジェクトには影響しません。
例えば、plugin.cms.container
の値はプラグインが使用するコンテナにのみ影響し、メインプロジェクトには影響しません。
例えば、plugin.cms.exception
の値はプラグインの例外処理クラスにのみ影響し、メインプロジェクトには影響しません。
しかし、ルーティングはグローバルであるため、プラグイン設定のルーティングは全体に影響します。
設定の取得
特定のプラグインの設定を取得する方法はconfig('plugin.{プラグイン}.{具体的な設定}');
です。例えば、plugin/cms/config/app.php
のすべての設定を取得する方法はconfig('plugin.cms.app')
です。
同様に、メインプロジェクトや他のプラグインもconfig('plugin.cms.xxx')
を使用してcmsプラグインの設定を取得できます。
サポートしていない設定
アプリケーションプラグインはserver.php、session.phpの設定をサポートしていません。app.request_class
、app.public_path
、app.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('test');
メインプロジェクトのログ設定を再利用したい場合は、そのまま使用します。
use support\Log;
Log::info('ログ内容');
// メインプロジェクトにtestログ設定があると仮定
Log::channel('test')->info('ログ内容');
アプリケーションプラグインのインストールとアンインストール
アプリケーションプラグインをインストールするには、プラグインディレクトリを{メインプロジェクト}/plugin
ディレクトリにコピーするだけで、reloadまたはrestartが必要です。
アンインストールする場合は、{メインプロジェクト}/plugin
下の対応するプラグインディレクトリを削除するだけです。