Сводка #Вы можете изменить или расширить функциональность Composer самостоятельно. Например, если ваша среда предъявляет особые требования к поведению Composer, которые не применимы к большинству ее пользователей, или вы хотите достичь чего-то с помощью композитора таким образом, который не нужен большинству пользователей. В этих случаях вы можете создать плагин для обработки вашей конкретной логики. Создание плагина #Плагин - это обычный пакет Composer, который отправляет свой код как часть пакета и может также зависеть от других пакетов. Пакет плагинов #Файл пакета такой же, как и любой другой файл пакета, но со следующими требованиями:
Необходимая версия Текущая версия API-интерфейса плагина для композитора - 1.1.0. Пример действительного файла { "name": "my/plugin-package", "type": "composer-plugin", "require": { "composer-plugin-api": "^1.1" }, "extra": { "class": "My\\Plugin" } } Класс плагина #Каждый плагин должен предоставить класс, который реализует Пример: getInstallationManager()->addInstaller($installer); } } Обработчик события #Кроме того, плагины могут реализовывать Чтобы зарегистрировать метод для события, реализуйте метод public static function getSubscribedEvents() { return array( 'post-autoload-dump' => 'methodToBeCalled', // ^ event name ^ ^ method name ^ ); } По умолчанию приоритет обработчика события устанавливается равным 0. Приоритет можно изменить, добавив кортеж, где первое значение является именем метода, как и прежде, а второе значение представляет собой целое число, представляющее приоритет. Высшие целые числа представляют более высокие приоритеты. Приоритет 2 вызывается перед приоритетом 1 и т. Д. public static function getSubscribedEvents() { return array( // Will be called before events with priority 0 'post-autoload-dump' => array('methodToBeCalled', 1) ); } Если нужно вызвать несколько методов, то к каждому событию может быть присоединен массив кортежей. Кортежи не должны включать приоритет. Если он опущен, по умолчанию он будет равен 0. public static function getSubscribedEvents() { return array( 'post-autoload-dump' => array( array('methodToBeCalled' ), // Priority defaults to 0 array('someOtherMethodName', 1), // This fires first ) ); } Вот полный пример: composer = $composer; $this->io = $io; } public static function getSubscribedEvents() { return array( PluginEvents::PRE_FILE_DOWNLOAD => array( array('onPreFileDownload', 0) ), ); } public function onPreFileDownload(PreFileDownloadEvent $event) { $protocol = parse_url($event->getProcessedUrl(), PHP_URL_SCHEME); if ($protocol === 's3') { $awsClient = new AwsClient($this->io, $this->composer->getConfig()); $s3RemoteFilesystem = new S3RemoteFilesystem($this->io, $event->getRemoteFilesystem()->getOptions(), $awsClient); $event->setRemoteFilesystem($s3RemoteFilesystem); } } } Возможности плагина #Composer определяет стандартный набор возможностей, которые могут быть реализованы плагинами. Их цель - сделать плагиновую экосистему более стабильной, поскольку она уменьшает необходимость возиться с внутренним состоянием Классы Capable Plugins должны реализовывать интерфейс 'My\Composer\CommandProvider', ); } } Поставщик команд #Функция setName('custom-plugin-command'); } protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('Executing'); } } Теперь команда Команды Composer основаны на компоненте консоли Symfony. Использование плагинов #Пакеты плагинов автоматически загружаются сразу же после их установки и будут загружаться, когда композитор запустится, если они будут найдены в списке установленных пакетов текущего проекта. Кроме того, все плагины, установленные в каталоге Вы можете передать опцию
|