cspray / annotated-console
一个基于 Symfony Console 的抽象层,使您能够轻松地在 CLI 应用中使用注解容器。
Requires
- php: ^8.1
- cspray/annotated-container: dev-main
- rdlowrey/auryn: ^1.4
- symfony/console: ^6.1
Requires (Dev)
- phpunit/phpunit: ^9.5
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
目录以获取更多示例,包括配置参数和选项。