antidot-fw / cli
Anti.Framework 控制台行工具
2.0.1
2024-05-22 18:54 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- psr/container: ^2.0
- symfony/console: ^5.0 || ^6.0
Requires (Dev)
- phpro/grumphp: ~1.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.4
- symfony/var-dumper: ^5.0 || ^6.0
This package is auto-updated.
Last update: 2024-09-22 19:40:48 UTC
README
这个库是用于通过标准 Zend 框架配置和任何兼容 Psr\ContainerInterface
的依赖注入容器使用 Symfony 控制台组件 的适配器
安装
使用 composer 包管理器
composer require antidot-fw/cli
Antidot 框架
Cli 组件默认安装在 Antidot 框架启动器 中
Zend Expressive
当我们已经安装了库 Zend Config Aggregator 后,运行 composer require 命令将自动安装 Cli 组件
我们只需创建控制台入口点即可
#!/usr/bin/env php <?php // bin/console declare(strict_types=1); use Antidot\Cli\Application\Console; set_time_limit(0); call_user_func(static function (): void { require __DIR__.'/../vendor/autoload.php'; $container = require __DIR__.'/../config/container.php'; $console = $container->get(Console::class); $console->run(); });
最后,我们将对文件 bin/console
给予执行权限
# Debian systems
chmod +x bin/console
作为独立应用程序
Cli 组件也可以用于创建没有框架的控制台应用程序,我们只需要一个兼容标准 Psr\ContainerInterface
的依赖注入容器实现
假设我们创建了一个以下结构的项目
bin/console
config/container.php
composer.json
作为依赖,我们可以使用 Antidot 框架适配 Aura 容器
# composer.json { "name": "antidot-fw/console-example", "description": "Antidot framework console project example", "type": "project", "require": { "antidot-fw/cli": "dev-master", "antidot-fw/aura-container-config": "dev-master" }, "require-dev": { "symfony/var-dumper": "^4.3" }, "autoload": { "psr-4": { "App\\": "src" } } }
我们创建文件 config/container.php
,它必须返回一个配置好的 Psr\ContainerInterface
实例给我们。
<?php // config/container.php use Aura\Di\ContainerBuilder; use Antidot\Aura\Container\Config\ContainerConfig; // Load configuration $config = [ 'dependencies' => [], 'console' => [ 'commands' => [] ] ]; // Build container $builder = new ContainerBuilder(); return $builder->newConfiguredInstance([ new ContainerConfig(\is_array($config) ? $config : []), ], $builder::AUTO_RESOLVE);
我们需要创建控制台入口点
<?php // bin/console declare(strict_types=1); use Antidot\Cli\Application\Console; set_time_limit(0); call_user_func(static function (): void { require __DIR__.'/../vendor/autoload.php'; $container = require __DIR__.'/../config/container.php'; $console = $container->get(Console::class); $console->run(); });
并给它执行权限
# Debian systems
chmod +x bin/console
用法
安装控制台后,我们可以通过带有参数 list
或不带参数执行入口点来查看可用的命令
bin/console
创建命令
要创建控制台命令,您需要创建一个继承自 Symfony\Component\Console\Command\Command
的类
<?php // src/Console/SomeCommand declare(strict_types=1); namespace App\Console\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use SomeDependency; class SomeCommand extends Command { /** * You can inject dependencies by constructor * @var SomeDependency */ private $dependency; public function __construct(SomeDependency $dependency) { $this->dependency = $dependency; parent::__construct(); } protected function configure(): void { $this->setName('some:command:name'); } protected function execute(InputInterface $input, OutputInterface $output): void { $output->writeLn('Hello World!!!'); } }
有关更多信息,您可以查看 Symfony 在此方面的官方文档
配置
配置由三个不同的元素组成:dependencies
、console.commands
和 console.helper-sets
<?php $config = [ 'config_cache_path' => 'var/cache/config-cache.php', 'dependencies' => [ 'invokables' => [ SomeCommandClass::class => SomeCommandClass::class, SomeHelperSet::class => SomeHelperSet::class, ] ], 'console' => [ 'commands' => [ 'some:command:name' => SomeCommandClass::class ], 'helper-sets' => [ SomeHelperSet::class ] ] ];