rollun-com/rollun-installer

安装器

5.0.0 2022-02-23 21:16 UTC

README

目录

rollun-installer 文档

install 库允许您为您的库或应用程序设置环境。

您应该创建实现 InstallerInterface 的类,其中将描述设置环境的程序。这些实现必须包含 Installer 后缀。

同样存在 InstallerAbstract 接口的抽象实现。在使用它时,您需要实现必需的方法 installuninstallisInstallgetDescription

  • install - 安装此安装器,并返回需要添加以使此安装器工作的配置。
  • uninstall - 删除安装器创建的所有内容。
  • isInstall - 如果安装器已安装,则返回 true,否则返回 false
  • getDescription - 在控制台上输出此安装器的描述。还有其他额外方法
  • isDefaultOn - 如果此安装器建议安装,则返回 true
  • getDependencyInstallers - 返回此安装器的依赖安装器列表。

该列表中的安装器将在主安装器之前启动。

在启动安装时,将按 从上到下 的顺序找到所有类似的安装器。

如果您的安装器调用顺序很重要,请考虑这一点。

此库允许您为依赖库设置环境。

首先将处理依赖库的安装器,然后是您的。

在运行时调用安装

安装器也有在运行时调用其他安装器的功能。为此,请使用 InstallerAbstract::callInstaller($installerName) 方法,并传递所需的安装器名称作为参数。

作为安装器名称使用的是其 className,即对于安装器 ExampleOneInstallerclassName - 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--

启动安装器

为了能够使用 composer 运行安装器,您应将 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");

要更详细地了解,请阅读文档

IO 使用示例

调试

为了方便调试您的安装器,有一个脚本 InstallerSelfCall,您可以在这里了解它