rollun-com / rollun-installer
Installer
Installs: 7 075
Dependents: 7
Suggesters: 0
Security: 0
Stars: 1
Watchers: 4
Forks: 1
Open Issues: 1
Type:composer-plugin
Requires
- php: ^8.0
- composer-plugin-api: ^2.2
- composer/composer: ^2.0
- laminas/laminas-db: ^2.13.4
- laminas/laminas-diactoros: ^2.8.0
- laminas/laminas-http: ^2.15.1
- laminas/laminas-servicemanager: ^3.10.0
- laminas/laminas-stratigility: ^3.5.0
- psr/log: ^2.0.0
- rollun-com/rollun-dic: ^4.0.0
Requires (Dev)
- laminas/laminas-config-aggregator: ^1.7
- mezzio/mezzio: ^3.9
- phpunit/phpunit: ^9.5.10
- symfony/dotenv: ^v6.0.3
- dev-master
- 5.0.0
- 4.0.8
- 4.0.7
- 4.0.6
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.4.4
- 3.4.3
- 3.4.2
- 3.4.1
- 3.4.0
- 3.3.2
- 3.3.1
- 3.3.0
- 3.2.0
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.11
- 3.0.10
- 3.0.9
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.13.0
- 1.1.3
- 1.1.0
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-laminas
- dev-bug-composer-features
- dev-features_setup
- dev-develop
- dev-routes_features
This package is auto-updated.
Last update: 2024-10-30 01:31:52 UTC
README
Оглавление
Документация rollun-installer
Библиотека install позволяет произвести настройку окружение для вашей библиотеки или приложения.
Вы должны создать реализации интерфейса InstallerInterface
в которых и будет описана процедура настройки окружения.
Данные реализации обязаны содержать в себе суфикс Installer
.
Так же существует InstallerAbstract
абстрактная реализация интерфейса.
При ее использоваии вам нужно реализовать обязательные метды install
, uninstall
, isInstall
, getDescription
.
install
- Установить данный инсталлер, и вернет конфиг который нужно добавить для работы данного инсталлера.uninstall
- Удалить все созданное инсталятором.isInstall
- Возвращяетtrue
в случае если данный инсталлер был установлен, иfalse
в ином случае.getDescription
- Выводит на консоль описание данного инсталлера. Есть еще перечень дополнительные методов:isDefaultOn
- Возвращаетtrue
в случае если данный инсталлер рекомендован к установке.getDependencyInstallers
- Возвращает список зависимых инсталлеров для данного инсталлера.
Инсталлера из данного списка будут запущены раньше основного инсталлера.
При запуске инсталяции, будут найдены все подобные инсталлеры в порядке сверху вниз.
Учитывайте это при напсании своих инсталлеров если вам важен порядок их вызова.
Данная библиотека позволяет настраивать окружение для зависимых библиотек.
Сначало будут обрабатыватся инсталлеры зависимых библиотек, а в конце ваши.
Вызов инсталяции в рантайме.
Так же иснталлер имеет возможность во время своей работы, вызвать установку другого иснталлера.
Для этого используйте метод InstallerAbstract::callInstaller($installerName)
, передав ему в парметры, имя желаемого инсталлера.
В качестве имени инсталлера используеться его className, то есть для инсталлера ExampleOneInstaller className -
rollun\installer\Example\ExampleOneInstaller::class
.
Даный метод вернет массив-конфиг сгенерированый вызываемым инсталлером, либо пустой массив, в случае если инсталлер уже был установлен ранее.
Пример
Пример инсталлера который создает требуемый для приложения файл
<?php /** * Created by PhpStorm. * User: victorsecuring * Date: 30.12.16 * Time: 2:16 PM */ namespace rollun\logger; use Composer\IO\IOInterface; use Interop\Container\ContainerInterface; use rollun\installer\Command; use rollun\installer\Install\InstallerAbstract; use rollun\logger\Factory\LoggingErrorListenerDelegatorFactory; use rollun\logger\LogWriter\FileLogWriter; use rollun\logger\LogWriter\FileLogWriterFactory; use rollun\logger\LogWriter\LogWriterInterface; use Zend\Stratigility\Middleware\ErrorHandler; class LoggerInstaller extends InstallerAbstract { const LOGS_DIR = 'logs'; const LOGS_FILE = 'logs.csv'; /** * Make clean and install. * @return void */ public function reinstall() { $this->uninstall(); $this->install(); } /** * Clean all installation * @return void */ public function uninstall() { if (constant('APP_ENV') !== 'dev') { $this->consoleIO->write('constant("APP_ENV") !== "dev" It has did nothing'); } else { $publicDir = Command::getDataDir(); if (file_exists($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR . DIRECTORY_SEPARATOR . self::LOGS_FILE)) { unlink($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR . DIRECTORY_SEPARATOR . self::LOGS_FILE); } if (is_dir($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR)) { rmdir($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR); } } } /** * install * @return array */ public function install() { if (constant('APP_ENV') !== 'dev') { $this->consoleIO->write('constant("APP_ENV") !== "dev" It has did nothing'); } else { $dir = Command::getDataDir() . DIRECTORY_SEPARATOR . self::LOGS_DIR; if (!is_dir($dir)) { mkdir($dir, 0777, true); } $file = $dir . DIRECTORY_SEPARATOR . self::LOGS_FILE; fopen($file, "w"); file_put_contents($file, "id;level;message\n"); return [ 'dependencies' => [ 'factories' => [ FileLogWriter::class => FileLogWriterFactory::class, Logger::class => LoggerFactory::class, ], 'aliases' => [ LogWriterInterface::DEFAULT_LOG_WRITER_SERVICE => FileLogWriter::class, Logger::DEFAULT_LOGGER_SERVICE => Logger::class, ], 'delegators' => [ ErrorHandler::class => [ LoggingErrorListenerDelegatorFactory::class ] ] ] ]; } } public function isInstall() { $publicDir = Command::getDataDir(); $result = file_exists($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR . DIRECTORY_SEPARATOR . self::LOGS_FILE); $result &= $this->container->has(LogWriterInterface::DEFAULT_LOG_WRITER_SERVICE); $result &= $this->container->has(Logger::DEFAULT_LOGGER_SERVICE); return $result; } public function isDefaultOn() { return true; } public function getDescription($lang = "en") { switch ($lang) { case "ru": $description = "Предоставяляет обьект logger позволяющий писать сообщения в лог.\n" . "LoggerException которое позволяет записывать в лог возникшее исключение, а так же предшествующее ему."; break; default: $description = "Does not exist."; } return $description; } } ?>
Переменные окружения
Для обозначения типа рабочего окружения используется переменная окружения APP_EVN
Используйте ее что бы определять для какого окружение происходит настройка.
Так же должны быть переменная MACHINE_NAME
которая должна содержать в себе имя текущей контейнера/машины.
Она должна содержать имя в таком виде {server_name}-{vm_name}-{container_name}
.
В случае если одной составляющей из данной цепочи не существует - пропустите ее.
Пример:
ServerDrakon-ProductionVM-5000
ServerDrakon-ProductionVM-
ServerDrakon--5000
ServerDrakon--
Запуск установщиков
Для того что бы можно было запускать инсталлеры используя композер вы должны установить rollun-com/rollun-installer в качестве зависимости.
Теперь после того как все предыдущее шаги были сделаны, вы можете используя команды
composer lib install
- Запускать инсталяторы для настрройки окружения.composer lib uninstall
- Удалять настроки окружения. Так же существует необязательный параметр-l=
которым можно указать язык на котором будет выводится описаниеcomposer lib install -l=ru
- Запускать инсталяторы, описание выводить на русском языке.- Так же для удобства существует флаг
debug
- он выведет всю информацию о найденый и проаналезированых библиотеках в котором не нашел инсталлера. Подобные данные могут помочь в отладке. Пример использованияcomposer lib install debug
.
Composer\IO\IOInterface
Для удобства использования, созданы вспомогательные функции
InstallerAbstract::askParams
- будет повторять вопрос и сообщать об ошибке пока ответ пустойInstallerAbstract::askParamWithDefault
- спросить пользователя хочет ли он использовать значение по умолчанию если ответ отрецательный попросить пользователя ввести значение.
Краткий туториал
Что бы вывести сообщение используйте ф-цию write
$io->write("some text");
Что бы вывести сообщение об ошибке используйте ф-цию write
$io->writeError(("some text");
Что бы задать пользователю вопрос используйте ф-цию write
$answer = $io->ask("question");
Для более детального изучения читайте документацию.
Debug
Для убдобства отладки ваших Installers есть скрипт InstallerSelfCall
, ознакомится с ним можно тут.