dotkernel / dot-console
Requires
- php: ^7.4
- laminas/laminas-console: ^2.8
- laminas/laminas-dependency-plugin: ^2.1
- laminas/laminas-servicemanager: ^3.4
Requires (Dev)
- phpunit/phpunit: ^9.1
- squizlabs/php_codesniffer: ^3.5
README
基于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