Я пытаюсь написать плагин композитора для модульной структуры, которую я создаю, чтобы каждый модуль был проверен и зарегистрирован после сброса автозагрузчика.Composer плагин post автозагрузка дампа срабатывает слишком поздно
Если я вручную запускаю скрипт через оболочку в "scripts"
, то часть composer.json
кажется сработавшей, однако плагин не запускает событие.
Это вырезанная версия с плагином, ограниченным только событием.
<?php
namespace My\Namespace;
use Composer\Composer;
use Composer\Config;
use Composer\EventDispatcher\EventSubscriberInterface;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginEvents;
use Composer\Plugin\PluginInterface;
use Composer\Script\CommandEvent;
class Plugin implements PluginInterface, EventSubscriberInterface
{
/**
* @param Composer $composer
* @param IOInterface $io
*/
public function activate(Composer $composer, IOInterface $io) { }
/**
* Once the autoloader has been dumped
* @param Event $event
*/
public function onPostAutoloadDump(CommandEvent $event)
{
$event->getIO()->write('Autoload dumped.');
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
PluginEvents::COMMAND => [
['onPostAutoloadDump' => 0]
]
];
}
}
документация плагин здесь: https://getcomposer.org/doc/articles/plugins.md
Названия событий здесь: https://getcomposer.org/doc/articles/scripts.md#event-names
composer.json включает
{
...
"type": "composer-plugin",
"extra": {
"class": "My\\Namespace\\Plugin"
},
...
}
Я попытался изменить CommandEvent
для регулярного Event
и Я попытался изменить тип события на onPreFileDownload
.
Иногда он будет бросать:
[ErrorException]
Undefined offset: 0
Но я не могу понять это либо нет трассировки стека.
Я не могу понять, что мне не хватает.
Вы на самом деле нужно только изменить 'PluginEvents :: command' к' 'пост-автозагрузку-dump'', остальное нормально, но я думаю, что это шоу более простой способ. – DanielM
Я не уверен, где это противоречит документации ...? –
Вы правы, я просто нашел документацию бесполезной. Пример сложный, имя события скрыто константой (и нет никакой константы, которую я мог бы найти для событий «Command» (кроме события с именем 'command'), и метод называется почти тем же, что и событие. Кроме того, они имеют приоритет, установленный в примере (который в конкретном примере бессмыслен, поскольку по умолчанию 0) еще больше беспокоит меня. Я обновил свой ответ, чтобы объяснить все это. Возможно, они увидят это и обновят их. – DanielM