mlw*_*mos 24 parameters service symfony
我正在添加一个新的命令行.我想在我的类中访问参数(parameters.yml)的值.
我读到我应该将此类添加为服务以访问该参数.所以
//config.yml
imports:
- { resource: services.yml }
Run Code Online (Sandbox Code Playgroud)
//services.yml
services:
less_css_compiler:
class: MyVendor\MyBundle\Command\ThemeCommand
arguments: [%less_compiler%]
Run Code Online (Sandbox Code Playgroud)
//parameters.yml
parameters:
less_compiler: WinLess.exe
Run Code Online (Sandbox Code Playgroud)
据说,正则论证是在类的构造函数中,但如果我这样做:
public function __construct($less_compiler) {
$this->less_compiler = $less_compiler;
}
Run Code Online (Sandbox Code Playgroud)
我有一个警告说第一个参数丢失了.在Command母类中有一个名称作为构造函数的唯一参数,但即使我写:
public function __construct($name, $less_compiler) {
}
Run Code Online (Sandbox Code Playgroud)
它没有改变任何东西..
其他可能性是调用我班级内的服务:
$service = $this->getContainer()->get('less_css_compiler');
Run Code Online (Sandbox Code Playgroud)
但是我怎么得到这个论点呢?
谢谢
Ven*_*enu 35
简单的方法,让命令扩展ContainerAwareCommand
$this->getContainer()->getParameter('parameter_name');
Run Code Online (Sandbox Code Playgroud)
要么
您应该创建单独的服务类
$service = $this->getContainer()->get('less_css_compiler');
Run Code Online (Sandbox Code Playgroud)
//services.yml
services:
less_css_compiler:
class: MyVendor\MyBundle\Service\LessCompiler
arguments: [%less_compiler%]
Run Code Online (Sandbox Code Playgroud)
在服务类中,创建上面提到的构造函数
public function __construct($less_compiler) {
$this->less_compiler = $less_compiler;
}
Run Code Online (Sandbox Code Playgroud)
从命令类调用服务.
而已.
原因:您将命令类本身作为服务,位命令类构造函数需要将命令名称作为第一个参数.
Str*_*bek 18
我在使用 Symfony 4.4 时遇到了同样的问题。这篇博文很好地解释了它。如果您使用autowire只需更新您的代码如下:
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class MessageGenerator
{
private $params;
public function __construct(ParameterBagInterface $params)
{
$this->params = $params;
}
public function someMethod()
{
$parameterValue = $this->params->get('parameter_name');
// ...
}
}
Run Code Online (Sandbox Code Playgroud)