cspray/annotated-console

关于该软件包最新版本(dev-main)没有可用的许可信息。

一个基于 Symfony Console 的抽象层,使您能够轻松地在 CLI 应用中使用注解容器。

dev-main 2022-09-08 10:17 UTC

This package is auto-updated.

Last update: 2024-09-08 14:38:30 UTC


README

Annotated Console 是一种使用 Annotated Container 自动配置和注入 symfony/console 应用程序的方法。默认情况下,Annotated Console 旨在提供以下功能

  • 自动将 Command 实例添加到 Symfony 应用程序。
  • 允许使用 PHP 8 属性配置 Command。
  • 依赖 Command 构造函数中的服务,并利用 Annotated Container 提供的其他功能。

安装

我建议使用 Composer 安装 Annotated Console。

composer require cspray/annotated-console:dev-main cspray/annotated-container:v2.x-dev

Annotated Console 目前需要 Annotated Container v2.x-dev。当 Annotated Container 发布 2.0 版本时,此库将发布 1.0 包。

快速入门

Annotated Console 被设计成通过几个简单的步骤快速上手。

第 1 步 - 初始化您的容器

此库的功能主要由 Annotated Container 提供。这意味着您需要确保您的配置已设置以引导应用程序。只要您在 composer.json 中设置了 PSR-4 或 PSR-0 自动加载配置,您就可以从项目的根目录运行以下命令

./vendor/bin/annotated-container init

默认情况下,init 命令将创建一个目录以缓存您的容器,这样静态分析就不必在每次 Command 运行时执行。在开发初期,建议禁用缓存,方法是从配置文件中删除 <cacheDir> 元素。如果添加了新的服务或命令,则必须适当地破坏容器缓存。

第 2 步 - 创建您的应用二进制文件

接下来,您需要创建一个用于运行应用程序的文件。您可以将此文件命名为存储在您喜欢的任何位置,但我们将示例放在 ./bin/acme

#!/usr/bin/env php
<?php declare(strict_types=1);

use Cspray\AnnotatedConsole\AnnotatedConsole;
use Symfony\Component\Console\Input\ArgvInput;

require_once dirname(__DIR__) . '/vendor/autoload.php';

// Customize this as appropriate for your installation. Please check out Annotated Container docs for more information
// If your list of profiles only ever includes 'default' you can skip over providing $profiles completely
$profiles = ['default'];
$exitCode = (new AnnotatedConsole(profiles: $profiles))->run(new ArgvInput());
exit($exitCode);

添加此脚本后,请确保运行 chmod +x ./bin/acme 以执行它!

第 3 步 - 添加您的命令

到目前为止,您可以开始添加命令了!在 Annotated Container 扫描的任何目录中,这将在第 1 步创建的 annotated-container.xml 文件中定义,实现一个扩展 Command 并由容器控制的对象。

<?php declare(strict_types=1);

namespace Acme\Demo;

use Symfony\Component\Console\Command\Command;
use Cspray\AnnotatedConsole\Attribute\ConsoleCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

#[ConsoleCommand('hello-world')]
class HelloWorld extends Command {

    protected function execute(InputInterface $input, OutputInterface $output) {
        $output->writeln('Hello, world!');
    }

}

现在,如果运行 ./bin/acme hello-world,您的命令将被执行!

您可以通过 ConsoleCommand 属性配置命令的大部分功能。查看 demo 目录以获取更多示例,包括配置参数和选项。