Как перевести описание Command с Symfony и TranslatorInterface? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть проект, использующий Symfony 3.4+.Компонент Translator хорошо работает.Я могу использовать его в объекте Command в методе execute, но не могу использовать его в методе configure.Переводчик имеет значение null.

class TestCommand extends Command
{    
    /**
     * Translator.
     *
     * @var TranslatorInterface
     */
    protected $translator;

    /**
     * DownloadCommand constructor.
     *
     * @param TranslatorInterface $translator
     */
    public function __construct(TranslatorInterface $translator)
    {
        parent::__construct();

        $this->translator = $translator;
    }

    protected function configure()
    {

        dump($this->translator);

        $this
            ->setName('app:test')
            ->setDescription('Test command description.')
            ->setHelp('Test command help.');
        //I cannot write $this->setHelp($this->translation->trans('...'));
        //because translator is still null
    }

    /**
     * Execute the command.
     *
     * @param InputInterface $input
     * @param OutputInterface $output
     *
     * @return int
     */
    protected function execute(InputInterface $input, OutputInterface $output): ?int
    {
        $output->writeln($this->translator->trans('command.test.translation'));

        return 0;
    }

}

Вот вывод:

C: \ test> php bin / console app: test

command.test в порядкепереведено

TestCommand.php в строке 48: null

Почему интерфейс переводчика не инициализируется в методе настройки?

Какинициализировать интерфейс переводчика в методе configure?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Базовый класс команд вызывает метод configure () в своем конструкторе .Поэтому, если вы хотите использовать некоторые поля с автопроводкой в ​​конфигурации вашей команды, вы должны сначала установить эти поля в конструкторе, а затем вызвать parent::__construct();, что вызывает $this->configure();

В вашем случае правильный код должен выглядеть следующим образомэто:

public function __construct(TranslatorInterface $translator)
{
    $this->translator = $translator;

    parent::__construct();
}
0 голосов
/ 17 февраля 2019

вам нужно настроить конфигурацию TestCommand в файле services.yml следующим образом

#app/config/services.yml
AppBundle\Command\TestCommand:
    arguments:
        $translator: '@translator'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...