Параметр доступа из командного класса
Я добавляю новую командную строку.
Я хотел бы иметь доступ к значению параметра (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;
}
Вызов службы из класса команд.
Вот оно.
Причина:. Вы сами создаете класс команд в качестве службы, бит-класс-класс-конструктор ожидает имя команды в качестве первого аргумента.