Сводка #Иногда может потребоваться, чтобы пакет требовал дополнительных действий во время установки, таких как установка пакетов за пределами стандартной библиотеки В этих случаях вы могли бы рассмотреть создание Custom Installer для обработки вашей конкретной логики. Вызов пользовательского установщика #Предположим, что в вашем проекте уже есть пользовательский установщик для определенных модулей, а затем вызов этого установщика - это вопрос определения правильного типа в файле пакета. Инструкции по созданию настраиваемых установщиков см. в следующей главе. Каждый пользовательский установщик определяет строку типа, которую он распознает. После распознавания он полностью переопределит установщик по умолчанию и применит только свою собственную логику. Пример использования: phpDocumentor показывает шаблоны, которые необходимо установить за пределами структуры папок default/vendor. В качестве такового они выбрали тип
Примером composer.json такого пакета шаблонов будет: { "name": "phpdocumentor/template-responsive", "type": "phpdocumentor-template", "require": { "phpdocumentor/template-installer-plugin": "*" } } ВАЖНО: чтобы убедиться, что программа установки шаблонов присутствует во время установки пакета шаблонов, в пакетах шаблонов должен быть установлен плагин. Создание установщика #Пользовательский установщик определяется как класс, который реализует Таким образом, базовый Installer Plugin будет состоять из трех файлов:
composer.json #Файл пакета такой же, как и любой другой файл пакета, но со следующими требованиями:
Пример: { "name": "phpdocumentor/template-installer-plugin", "type": "composer-plugin", "license": "MIT", "autoload": { "psr-0": {"phpDocumentor\\Composer": "src/"} }, "extra": { "class": "phpDocumentor\\Composer\\TemplateInstallerPlugin" }, "require": { "composer-plugin-api": "^1.0" }, "require-dev": { "composer/composer": "^1.3" } } В приведенном выше примере есть сам Composer в своем require-dev, который позволяет вам использовать классы Composer в вашем тестовом наборе, например. Класс плагина #Класс, определяющий плагин Composer, должен реализовывать Класс может быть размещен в любом месте и иметь любое имя, если оно самозагружаемо и соответствует элементу Пример: getInstallationManager()->addInstaller($installer); } } Пользовательский класс установщика #Класс, который выполняет пользовательскую установку, должен реализовать ПРИМЕЧАНИЕ. Внимательно выберите название своего типа, рекомендуется придерживаться формата: Класс InstallerInterface определяет следующие методы (см. Источник точной подписи):
Пример: getPrettyName(), 0, 23); if ('phpdocumentor/template-' !== $prefix) { throw new \InvalidArgumentException( 'Unable to install template, phpdocumentor templates ' .'should always start their package name with ' .'"phpdocumentor/template-"' ); } return 'data/templates/'.substr($package->getPrettyName(), 23); } /** * {@inheritDoc} */ public function supports($packageType) { return 'phpdocumentor-template' === $packageType; } } Этот пример демонстрирует, что довольно просто расширить класс Вместо установки в |