Сводка #Вы можете изменить или расширить функциональность 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. Использование плагинов #Пакеты плагинов автоматически загружаются сразу же после их установки и будут загружаться, когда композитор запустится, если они будут найдены в списке установленных пакетов текущего проекта. Кроме того, все плагины, установленные в каталоге Вы можете передать опцию |