У меня есть консольная команда Symfony, требующая вызова установщика.
Сеттер указан в определении «parent» определения службы команды. Сеттер никогда не вызывается.
Примечание: конкретная реализация, которую я здесь показываю, является упрощенной версией гораздо более сложной реальной реализации. Эта более простая версия демонстрирует ту же проблему.
Файл конфигурации:
# config/commands.yaml
services:
AppCommandTemplate:
abstract: true
public: false
calls:
- [initCommand, ['@logger']]
App\Command\XyzzyCommand:
parent: AppCommandTemplate
tags: [console.command]
Источник команды:
<?php
// src/Command/XyzzyCommand.php
namespace App\Command;
use Psr\Log\LoggerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class XyzzyCommand extends Command
{
protected static $defaultName = 'app:xyzzy';
protected $logger;
protected function configure(): void
{
$this->setDescription( 'Test command' );
} // configure()
protected function execute( InputInterface $in, OutputInterface $out )
{
$out->writeln( 'This is ' . __METHOD__ );
$out->writeln( 'logger is a ' . get_class( $this->logger ));
} // execute()
//
// This function is never called.
//
public function initXyzzyCommand( LoggerInterface $logger )
{
$this->logger = $logger;
} // initXyzzyCommand()
} // XyzzyCommand{}
Вывод из консоли debug: команда контейнера не показывает вызов.
app> console debug:container App\Command\XyzzyCommand
Information for Service "App\Command\XyzzyCommand"
==================================================
---------------- --------------------------
Option Value
---------------- --------------------------
Service ID App\Command\XyzzyCommand
Class App\Command\XyzzyCommand
Tags console.command
Calls setName <-- This line should include initCommand
Public no
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
---------------- --------------------------
Окружающая среда:
- Mac OS 10.13.6 (High Sierra)
- Доморощенный 1.8.6
- PHP 7.2.6
- Symfony 4.2.2