composer.json
プラグインパッケージのメインファイルは次のようになります。
{ "name": "praxigento/composer_plugin_templates", "type": "composer-plugin", "require": { "composer-plugin-api": "1.0.0" }, "autoload": { "psr-4": { "\\Praxigento\\Composer\\Plugin\\Templates\\": "src/" } }, "extra": { "class": "\\Praxigento\\Composer\\Plugin\\Templates\\" }, "scripts": { "test": "phpunit" } }
nameパラメータはあなたの好みに合わせて設定されています。praxigento / composer_plugin_templatesを取得しました 。
タイプと必要なパラメーターを使用すると、すべてが非常に明確になります。
autoload.psr-4パラメーターは、 PSR-4に従ってプラグインクラスの自動ロード構成を決定します( PSR-0は 2014年10月21日に廃止されたため、この標準を使用することをお勧めします)。 この設定に従って、ソースは./src/サブディレクトリにあります。
extra.classパラメーターは、 Composer(またはパラメーター値が配列の場合はクラスのセット)によってロードされるプラグインのメインクラスを定義します。
scripts.testパラメーターを使用すると、コマンドライン「 $ composer test 」からプラグインテストを実行できます 。
エントリーポイント
extra.classで指定されたクラスは、Composerのプラグインへのエントリポイントです。 Composerの要件に従って、このクラスはComposer \ Plugin \ PluginInterfaceインターフェイスを実装する必要があります。
namespace Praxigento\Composer\Plugin\Templates; use Composer\Composer; use Composer\IO\IOInterface; use Composer\Plugin\PluginInterface; class Main implements PluginInterface { protected $composer; protected $io; public function activate(Composer $composer, IOInterface $io) { $this->composer = $composer; $this->io = $io; } }
パラメータアクセス
プラグイン操作パラメーターは、プラグインが使用されるメインパッケージのcomposer.jsonの 追加セクションを介して構成されます。
{ "name": "vendor/package", "type": "project", "repositories": [ { "type": "vcs", "url": "https://github.com/praxigento/composer_plugin_templates" } ], "require": { "praxigento/composer_plugin_templates": "*" }, "extra": { "praxigento_templates_config": "./instance_cfg.json" } }
プラグインは、 プロジェクト構成ファイル( composer.json )のextra.praxigento_templates_configパラメーターを介して設定されるファイルから、その作業の設定を取得する必要があります。 プラグインが初期化されたときにこれを行います:
class Main implements PluginInterface, EventSubscriberInterface { public function activate(Composer $composer, IOInterface $io) { $this->composer = $composer; $this->io = $io; $extra = $composer->getPackage()->getExtra(); $configFile = $extra['praxigento_templates_config']; } }
イベント処理
プラグインの実装では、 イベントに応答する必要がありました 。
- post-install-cmd
- post-update-cmd
このため、エントリポイントはEventSubscriberInterfaceインターフェイスも実装し、対応するイベントをサブスクライブし、ハンドラーを登録する必要があります。
class Main implements PluginInterface, EventSubscriberInterface { public static function getSubscribedEvents() { $result = array( ScriptEvents::POST_INSTALL_CMD => array( array( 'onPostInstallCmd', 0 ) ), ScriptEvents::POST_UPDATE_CMD => array( array( 'onPostUpdateCmd', 0 ) ), ); return $result; } public function onPostInstallCmd(CommandEvent $event) { } public function onPostUpdateCmd(CommandEvent $event) { } }
テストを実行する
PhpUnitはcomposer.jsonで接続されています:
{ "require-dev": { "phpunit/phpunit": "4.4.*" } }
単体テストの設定-phpunit.xml.distファイル内:
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" syntaxCheck="false" bootstrap="phpunit.bootstrap.php" > <testsuites> <testsuite name="Plugin Test Suite"> <directory suffix="_Test.php">./src/</directory> </testsuite> </testsuites> </phpunit>
phpunit.bootstrap.phpスクリプトで、PSR-4と互換性のあるオートローダーをダウンロードします(それなしではテストはPhpStorm IDEから起動されません)。
require __DIR__.'/vendor/autoload.php';
composerを介したテストの実行:
$ composer test
おわりに
この情報は、Composer用の独自のプラグインを作成するのに十分なはずです。 最後まで読んでくれたみんなに感謝します。