Установщик службы Symfony не вызывается (указывается в «шаблоне») - PullRequest
0 голосов
/ 08 января 2019

У меня есть консольная команда 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

...