aura/cli-project

由 Aura v2 包构建的最小命令行框架

安装: 495

依赖: 0

建议者: 0

安全: 0

星标: 14

关注者: 9

分支: 2

开放问题: 0

类型:项目

2.0.2 2015-03-28 16:55 UTC

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}

这将创建项目骨架并安装所有必要的包。

测试

Build Status

要在命令行中运行单元测试,请在包根目录下输入phpunit。这需要PHPUnitphpunit的形式可用。

或者,在您安装了项目后,转到项目目录并输入以下命令

cd {$PROJECT_PATH}
php cli/console.php hello

您应该看到输出Hello World!。尝试在hello后传递一个名称以查看Hello name!

PSR合规性

本项目尝试遵守PSR-1PSR-2PSR-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:contextaura/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:contextaura/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参数,您将看到错误消息。)

其他变体

这些只是分发器交互的一些常见变体;还有许多其他组合