У меня есть cli-проект, в котором я использую компоненты Symfony Dependency Injection и Console. Я не использую ядро, контроллеры и т. Д. c.
При использовании autoconfigure: true
служба не получает тег console.command
, который должен.
Мой composer. json:
{
"require": {
"php": "^7.4",
"monolog/monolog": "^2.0",
"symfony/console": "^5.0",
"symfony/dependency-injection": "^5.0",
"symfony/config": "^5.0",
"symfony/yaml": "^5.0"
},
"autoload": {
"psr-4": {"Mudder\\": "src/"}
}
}
. / Config / services.yaml:
services:
_defaults:
autowire: true
autoconfigure: true
Mudder\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
public: true
. / Src / Mudder / Command / HelloWorld. php:
<?php
namespace Mudder\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class HelloWorld extends Command
{
protected static string $defaultName = 'test';
protected function configure()
{
$this->setDescription('Foo');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('Hello, world.');
return 0;
}
}
Наконец, ./test.php (точка входа в cli):
<?php
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
$containerBuilder = new ContainerBuilder();
$loader = new YamlFileLoader($containerBuilder, new FileLocator(__DIR__ . '/config'));
$loader->load('services.yaml');
$containerBuilder->compile();
print_r($containerBuilder->getDefinition(\Mudder\Command\HelloWorld::class)->getTags());
Выход из print_r () - пустой массив "Array () «