Параметр доступа из командного класса

Я добавляю новую командную строку. Я хотел бы иметь доступ к значению параметра (parameters.yml) в моем классе.

Я читал, что я должен добавить этот класс в качестве службы для доступа к параметру. Так

//config.yml

imports:
- { resource: services.yml }

//services.yml

services:
  less_css_compiler:
    class: MyVendor\MyBundle\Command\ThemeCommand
    arguments: [%less_compiler%]

//parameters.yml

parameters:
    less_compiler:     WinLess.exe

говорится, что normaly аргумент находится в конструкторе класса, но если я это сделаю:

public function __construct($less_compiler) {
    $this->less_compiler = $less_compiler;
}

У меня есть предупреждение о том, что первый аргумент отсутствует. В командном классе Command есть имя, а затем уникальный аргумент конструктора, но даже если я пишу:

 public function __construct($name, $less_compiler) {
 }

Это ничего не меняет.

Другая возможность - вызвать службу внутри моего класса:

$service = $this->getContainer()->get('less_css_compiler');

Но как мне получить аргумент?

Спасибо

Ответ 1

Простой способ, пусть команда расширяет ContainerAwareCommand

$this->getContainer()->getParameter('parameter_name');

или

Вы должны создать отдельный класс обслуживания

$service = $this->getContainer()->get('less_css_compiler');

//services.yml

services:
  less_css_compiler:
    class: MyVendor\MyBundle\Service\LessCompiler
    arguments: [%less_compiler%]

В классе службы создайте конструктор, как указано выше.

public function __construct($less_compiler) {
    $this->less_compiler = $less_compiler;
}

Вызов службы из класса команд.

Вот оно.

Причина:. Вы сами создаете класс команд в качестве службы, бит-класс-класс-конструктор ожидает имя команды в качестве первого аргумента.