基本なプラグインの生成および公開プロセス

原理

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 を修正することで、プラグインのインストールとアンインストール時にカスタム操作を行うことができます。

プラグインの提出

  • すでに githubpackagist のアカウントを持っていると仮定します。
  • githubadmin プロジェクトを作成し、コードをアップロードします。プロジェクトのアドレスは仮に https://github.com/あなたのユーザー名/admin とします。
  • アドレス https://github.com/あなたのユーザー名/admin/releases/new に移動し、v1.0.0 のようなリリースを発行します。
  • packagist にアクセスし、ナビゲーションバーで Submit をクリックし、あなたのgithubプロジェクトのアドレス https://github.com/あなたのユーザー名/admin を提出します。これでプラグインの公開が完了します。

ヒント
packagist にプラグインを提出した際に衝突が表示された場合は、新しいメーカー名を取ることを検討してください。例えば、foo/adminmyfoo/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 と表示されます。