基本なプラグインの生成および公開プロセス
原理
1、クロスドメインプラグインを例にすると、プラグインは3つの部分で構成されます。1つはクロスドメインミドルウェアプログラムファイル、もう1つはミドルウェア設定ファイル middleware.php
、最後はコマンドによって自動生成される Install.php
です。
2、コマンドを使用して、これらの3つのファイルをパッケージ化し、composerに公開します。
3、ユーザーがcomposerでクロスドメインプラグインをインストールすると、プラグイン内の Install.php
がクロスドメインミドルウェアプログラムファイルと設定ファイルを {主プロジェクト}/config/plugin
にコピーし、webmanが読み込むようにします。これにより、クロスドメインミドルウェアファイルの自動設定が有効になります。
4、ユーザーがcomposerでこのプラグインを削除すると、Install.php
が対応するクロスドメインミドルウェアプログラムファイルと設定ファイルを削除し、プラグインの自動アンインストールを実現します。
規範
1、プラグイン名は メーカー
と プラグイン名
の2つの部分で構成され、例えば webman/push
のように、これはcomposerパッケージ名に対応します。
2、プラグイン設定ファイルはすべて config/plugin/メーカー/プラグイン名/
に配置されます(consoleコマンドが自動で設定ディレクトリを作成します)。プラグインに設定が不要な場合は、自動生成された設定ディレクトリを削除する必要があります。
3、プラグイン設定ディレクトリは、app.php
プラグイン主要設定、bootstrap.php
プロセス起動設定、route.php
ルーティング設定、middleware.php
ミドルウェア設定、process.php
カスタムプロセス設定、database.php
データベース設定、redis.php
redis設定、thinkorm.php
thinkorm設定のみをサポートします。これらの設定は自動的にwebmanに認識されます。
4、プラグインは以下の方法で設定を取得します。 config('plugin.メーカー.プラグイン名.設定ファイル.具体的な設定項目');
例えば config('plugin.webman.push.app.app_key')
5、プラグインが独自のデータベース設定を持っている場合、次の方法でアクセスします。illuminate/database
の場合は Db::connection('plugin.メーカー.プラグイン名.具体的な接続')
、thinkrom
の場合は Db::connct('plugin.メーカー.プラグイン名.具体的な接続')
6、プラグインが app/
ディレクトリにビジネスファイルを配置する必要がある場合は、ユーザーのプロジェクトや他のプラグインと衝突しないことを確認する必要があります。
7、プラグインは主プロジェクトにファイルやディレクトリをコピーすることをできるだけ避けるべきです。例えば、クロスドメインプラグインは設定ファイル以外は主プロジェクトにコピーする必要はなく、ミドルウェアファイルは vendor/webman/cros/src
に置くべきです。
8、プラグインの名前空間には大文字を使用することをお勧めします。例えば Webman/Console
。
例
webman/console
コマンドのインストール
composer require webman/console
プラグインの作成
作成するプラグイン名は foo/admin
とします(この名前が後でcomposerに公開するプロジェクト名になります。名前は小文字にする必要があります)。
コマンドを実行します。
php webman plugin:create --name=foo/admin
プラグインを作成すると、プラグイン関連のファイルを収納するためのディレクトリ vendor/foo/admin
と、プラグイン関連の設定を収納するための config/plugin/foo/admin
が生成されます。
注意
config/plugin/foo/admin
は次の設定をサポートします。app.php
プラグイン主要設定、bootstrap.php
プロセス起動設定、route.php
ルーティング設定、middleware.php
ミドルウェア設定、process.php
カスタムプロセス設定、database.php
データベース設定、redis.php
redis設定、thinkorm.php
thinkorm設定。設定形式はwebmanと同じで、これらの設定は自動的にwebmanに認識されて統合されます。
使用時にはplugin
をプレフィックスとして参照します。例えばconfig('plugin.foo.admin.app');
プラグインのエクスポート
プラグインの開発が完了したら、次のコマンドを実行してプラグインをエクスポートします。
php webman plugin:export --name=foo/admin
エクスポートします。
説明
エクスポート後、config/plugin/foo/admin
ディレクトリがvendor/foo/admin/src
にコピーされ、同時に自動的にInstall.php
が生成されます。Install.php
は自動インストールと自動アンインストール時にいくつかの操作を実行するために使用されます。
インストール時のデフォルトの操作はvendor/foo/admin/src
下の設定を現在のプロジェクトのconfig/plugin
にコピーすることです。
削除時のデフォルトの操作は現在のプロジェクトのconfig/plugin
下の設定ファイルを削除することです。
Install.php
を修正することで、プラグインのインストールとアンインストール時にカスタム操作を行うことができます。
プラグインの提出
- すでに github と packagist のアカウントを持っていると仮定します。
- github で
admin
プロジェクトを作成し、コードをアップロードします。プロジェクトのアドレスは仮にhttps://github.com/あなたのユーザー名/admin
とします。 - アドレス
https://github.com/あなたのユーザー名/admin/releases/new
に移動し、v1.0.0
のようなリリースを発行します。 - packagist にアクセスし、ナビゲーションバーで
Submit
をクリックし、あなたのgithubプロジェクトのアドレスhttps://github.com/あなたのユーザー名/admin
を提出します。これでプラグインの公開が完了します。
ヒント
packagist
にプラグインを提出した際に衝突が表示された場合は、新しいメーカー名を取ることを検討してください。例えば、foo/admin
をmyfoo/admin
に変更します。
その後、プラグインプロジェクトのコードに更新があるときは、コードをgithubに同期させ、再度アドレス https://github.com/あなたのユーザー名/admin/releases/new
にアクセスしてリリースを発行し、その後 https://packagist.org/packages/foo/admin
のページで Update
ボタンをクリックしてバージョンを更新します。
プラグインにコマンドを追加する
時には、プラグインにカスタムコマンドを追加してサポート機能を提供する必要があります。例えば webman/redis-queue
プラグインをインストールすると、プロジェクトには自動的に redis-queue:consumer
コマンドが追加され、ユーザーが php webman redis-queue:consumer send-mail
を実行すると、プロジェクトには SendMail.php
の消費者クラスが生成され、迅速な開発に役立ちます。
foo/admin
プラグインに foo-admin:add
コマンドを追加する必要があると仮定し、以下のステップを参考にします。
コマンドの新規作成
コマンドファイル vendor/foo/admin/src/FooAdminAddCommand.php
を新規作成
<?php
namespace Foo\Admin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FooAdminAddCommand extends Command
{
protected static $defaultName = 'foo-admin:add';
protected static $defaultDescription = 'ここにコマンドラインの説明が入ります。';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Add name');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin add $name");
return self::SUCCESS;
}
}
注意
プラグイン間でのコマンドの衝突を避けるために、コマンドラインの形式はメーカー-プラグイン名:具体的なコマンド
をお勧めします。例えばfoo/admin
プラグインのすべてのコマンドはfoo-admin:
というプレフィックスで始まるべきです。例:foo-admin:add
。
設定の追加
設定 config/plugin/foo/admin/command.php
を新規作成
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....複数の設定を追加可能...
];
ヒント
command.php
はプラグインのカスタムコマンドを設定するために使用されます。配列の各要素は1つのコマンドラインクラスファイルに対応し、各クラスファイルは1つのコマンドに対応します。ユーザーがコマンドラインを実行すると、webman/console
は自動的に各プラグインのcommand.php
に設定されたカスタムコマンドをロードします。コマンドラインに関する詳細は コマンドライン を参照してください。
エクスポートを実行
コマンド php webman plugin:export --name=foo/admin
を実行してプラグインをエクスポートし、packagist
に提出します。これでユーザーが foo/admin
プラグインをインストールすると、foo-admin:add
コマンドが追加されます。php webman foo-admin:add jerry
を実行すると Admin add jerry
と表示されます。