dotkernel/dot-console

该软件包已被废弃,不再维护。作者建议使用dotkernel/dot-cli软件包。

基于laminas-console的创建控制台应用程序的DotKernel组件

3.2.2 2021-06-07 09:15 UTC

This package is auto-updated.

Last update: 2021-06-07 09:18:40 UTC


README

OSS Lifecycle GitHub license

基于laminas-console构建控制台应用程序的DotKernel组件

注意

laminas-console 已被废弃,将不再进行进一步开发!

我们建议使用dotkernel/dot-cli

要求

  • PHP >= 7.4
  • laminas/laminas-servicemanager >= 3.4,
  • laminas/laminas-console >= 2.8

安装

在您的项目根目录中运行以下命令

$ composer require dotkernel/dot-console

接下来,将软件包的ConfigProvider注册到您的应用程序配置中。您也可以在容器中手动注册软件包的依赖项。只有一个依赖项需要注册 Dot\Console\Factory\ApplicationFactory,它应该用于创建用于启动应用程序的Laminas\Console\Application对象。

配置和用法

您应该在您的项目中创建一个引导文件,类似于index.php,它将从命令行调用以启动控制台命令。我们建议您在项目根目录中创建一个bin文件夹。在这里,您可以创建一个console.php文件,内容如下。

<?php

/**
 * Console application bootstrap file
 */
use Dot\Console\Application;

chdir(dirname(__DIR__));
require 'vendor/autoload.php';

/**
 * Self-called anonymous function that creates its own scope and keep the global namespace clean.
 */
call_user_func(function () {
    /** @var \Interop\Container\ContainerInterface $container */
    $container = require 'config/container.php';

    /** @var Application $app */
    $app = $container->get(Application::class);
    $app->run();
    exit(0);
});

这假设您正在使用我们的某个Web启动应用程序或结构类似的Mezzio应用程序。接下来,您可以在命令行中调用控制台命令。

$ php bin/console.php <command_name> <parameters>

您可以尝试一些提供的开箱即用的命令

$ php bin/console.php help

创建命令

dot-console主要是在laminas-console的基础上进行包装。在检查它们的完整文档之前。为什么是包装器?

  • 它允许我们在需要时扩展原始软件包
  • 我们可以简化一些事情

该软件包首先提供的是Dot\Console\Application工厂,它使用在dot_console键中提供的配置数组创建软件包。控制台应用程序需要一个名称、版本、路由配置、控制台实例和分发器。您可以在以下格式中提供控制台应用程序的配置文件

return [
    'dot_console' => [
        'name' => 'Console Name',
        'version' => '3.2.0',
        'showVersion' => true,
        'lock' => true,
        'commands' => [
            //...
        ]
    ]
];

第二件事是一个抽象类,您的命令应该扩展它。这个类强制使用适当的参数定义的__invoke方法来定义控制台命令。命令必须是可调用的类,具有以下签名

public function __invoke(RouteCollector $route, AdapterInterface $console)

命令类是从容器中拉取的,所以您可以将依赖项注入到您的命令中。

'Hello World!' 命令示例

创建HelloCommand类

use Dot\Console\Command\AbstractCommand;
use Laminas\Console\Adapter\AdapterInterface;
use Dot\Console\RouteCollector as Route;

class HelloCommand extends AbstractCommand
{
    /**
     * @param Route $route
     * @param AdapterInterface $console
     * @return int
     */
    public function __invoke(Route $route, AdapterInterface $console)
    {
        $console->writeLine('Hello World Command');
        return 0;
    }
}

接下来,将此类注册到您的容器中作为依赖项。

将命令添加到配置中

更新控制台配置以包括此命令

//...
'commands' => [
    [
        'name' => 'hello',
        'description' => 'Hello, World! command full description',
        'short_description' => 'Hello, World! command short description',
        'handler' => HelloCommand::class,
    ],
]
//...

将自定义参数添加到配置文件

//...
'commands' => [
    [
        'name' => 'hello',
        'route' => '[--action=] [--param_one=] [--...=]',
        'description' => 'Hello, World! command full description',
        'short_description' => 'Hello, World! command short description.',
        'options_descriptions' => [
            '--action' => 'Target action.',
            '--param_one'  => 'Parameter one description.'
        ],
        'handler' => HelloCommand::class
    ],
]
//...

请注意,当执行命令时,会显示

  • description的内容
  • short_description的内容在执行可用命令列表或获取特定命令的帮助时显示

测试命令

在命令行中,进入您项目的根目录,并输入以下命令

$ php ./bin/console.php hello

对于完整的文档,您可以参考laminas-console。其中与命令相关的任何内容也适用于此包。

许可证

MIT