aura / cli-project
由 Aura v2 包构建的最小命令行框架
Requires
- aura/cli-kernel: ~2.0
- monolog/monolog: ~1.0
This package is auto-updated.
Last update: 2024-09-11 04:17:05 UTC
README
此包提供最小化框架用于命令行项目。
“最小化”意味着非常小。包仅提供依赖注入容器、配置系统、调度器、一对上下文和标准I/O对象以及日志实例。
这种最小化实现不应被视为“限制性”。DI容器具有两阶段配置系统,允许广泛的程序性服务定义。调度器考虑到迭代重构,因此您可以从小型框架类似的自闭命令开始,逐步发展到更复杂的自定义命令对象。
前言
要求
本项目需要PHP 5.4或更高版本;我们原则上建议使用PHP的最新可用版本。
与Aura库包不同,本项目包有用户空间依赖项,这些依赖项本身可能还有其他依赖项
安装
通过Composer将此项目安装到您选择的{$PROJECT_PATH}
composer create-project aura/cli-project {$PROJECT_PATH}
这将创建项目骨架并安装所有必要的包。
测试
要在命令行中运行单元测试,请在包根目录下输入phpunit
。这需要PHPUnit以phpunit
的形式可用。
或者,在您安装了项目后,转到项目目录并输入以下命令
cd {$PROJECT_PATH}
php cli/console.php hello
您应该看到输出Hello World!
。尝试在hello
后传递一个名称以查看Hello name!
。
PSR合规性
本项目尝试遵守PSR-1、PSR-2和PSR-4。如果您发现合规性疏忽,请通过拉取请求发送补丁。
社区
要提问、提供反馈或与其他Aura社区进行交流,请加入我们的Google Group,关注@auraphp在Twitter上的动态,或在Freenode上与我们聊天。
服务
此包使用以下定义的服务
本项目重置以下服务
aura/project-kernel:logger
:一个Monolog\Logger
实例
入门指南
组件包
本项目将一系列独立的Aura包组合成一个统一的整体。每个包的操作都有单独的文档。
依赖注入容器是Aura项目操作的核心。在继续之前,请熟悉Aura.Di文档。
您还应熟悉Aura.Dispatcher,以及Aura.Cli的上下文、Stdio和状态对象。
项目配置
每个Aura项目都按照相同的方式进行配置。请参阅共享配置文档获取更多信息。
日志记录
项目自动记录到{$PROJECT_PATH}/tmp/log/{$mode}.log
。如果您想更改特定配置模式的日志行为,请编辑相关的配置文件(例如,config/Dev.php
)以修改aura/project-kernel:logger
服务。
命令
我们通过项目级别的config/
类文件配置命令。如果一个命令需要在每个配置模式下都可用,请编辑项目级别的config/Common.php
类文件。如果它只需要在特定模式下可用,例如dev
,那么请编辑该模式的配置文件。
以下是两种不同的命令定义风格。
微框架风格
以下是一个示例,其中逻辑嵌入在分发器中,使用aura/cli-kernel:context
和aura/cli-kernel:stdio
服务以及标准退出代码。(分发器对象的名称同时用作命令名称。)
<?php namespace Aura\Cli_Project\_Config; use Aura\Di\Config; use Aura\Di\Container; class Common extends Config { // ... public function modifyCliDispatcher(Container $di) { $context = $di->get('aura/cli-kernel:context'); $stdio = $di->get('aura/cli-kernel:stdio'); $dispatcher = $di->get('aura/cli-kernel:dispatcher'); $dispatcher->setObject( 'foo', function ($id = null) use ($context, $stdio) { if (! $id) { $stdio->errln("Please pass an ID."); return \Aura\Cli\Status::USAGE; } $id = (int) $id; $stdio->outln("You passed " . $id . " as the ID."); } ); } ?>
现在您可以运行该命令以查看其输出。
cd {$PROJECT_PATH}
php cli/console.php foo 88
(如果您没有传递ID参数,您将看到错误消息。)
全栈风格
您可以从微控制器风格迁移到全栈风格(或者一开始就使用全栈风格)。
首先,定义一个命令类并将其放置在项目src/
目录中。
<?php /** * {$PROJECT_PATH}/src/App/Command/FooCommand.php */ namespace App\Command; use Aura\Cli\Stdio; use Aura\Cli\Context; use Aura\Cli\Status; class FooCommand { public function __construct(Context $context, Stdio $stdio) { $this->context = $context; $this->stdio = $stdio; } public function __invoke($id = null) { if (! $id) { $this->stdio->errln("Please pass an ID."); return Status::USAGE; } $id = (int) $id; $this->stdio->outln("You passed " . $id . " as the ID."); } } ?>
接下来,通过DIContainer告诉项目如何构建FooCommand。编辑项目config/Common.php
文件以配置Container,将aura/cli-kernel:context
和aura/cli-kernel:stdio
服务对象传递给FooCommand构造函数。然后将App\Command\FooCommand对象以懒加载实例化的形式放在分发器下的foo
名称下。
<?php namespace Aura\Cli_Project\_Config; use Aura\Di\Config; use Aura\Di\Container; class Common extends Config { public function define(Container $di) { $di->set('aura/project-kernel:logger', $di->newInstance('Monolog\Logger')); $di->params['App\Command\FooCommand'] = array( 'context' => $di->lazyGet('aura/cli-kernel:context'), 'stdio' => $di->lazyGet('aura/cli-kernel:stdio'), ); } // ... public function modifyCliDispatcher(Container $di) { $dispatcher = $di->get('aura/cli-kernel:dispatcher'); $dispatcher->setObject( 'foo', $di->lazyNew('App\Command\FooCommand') ); } ?>
现在您可以运行该命令以查看其输出。
cd {$PROJECT_PATH}
php cli/console.php foo 88
(如果您没有传递ID参数,您将看到错误消息。)
其他变体
这些只是分发器交互的一些常见变体;还有许多其他组合。