Symfony 4依赖注入-根据用例定义构造函数参数



我有一个通用服务,它使用配置来进行处理。

<?php
namespace AppService;
class MyCustomService
{
/**
* @var array
*/
private $config;
/**
* MyCustomService constructor.
*
* @param array $config
*/
public function __construct(array $config)
{
$this->config = $config;
}
public function getConfig()
{
return $this->config;
}
}

我想在控制器的操作中注入该服务。但每个动作都有一个特定的配置。

<?php
namespace AppController;
use AppServiceMyCustomService;
class MyCustomController
{
public function action_1(MyCustomService $myCustomService)
{
/**
* $config must contain 
* ['foo' => 'bar']
*/
$config = $myCustomService->getConfig();
}
public function action_2(MyCustomService $myCustomService)
{
/**
* $config must contain
* ['foo' => 'baz']
*/
$config = $myCustomService->getConfig();
}
}

如何使用config/services. Yaml来完成此操作?

是否有配置控制器操作的方法?

像这样,例如:

services: 
#...
#...
#...

AppControllerMyCustomController:action_1:
arguments:
$myCustomService: 
AppServiceMyCustomService:
arguments:
$config: {foo: 'bar'}

AppControllerMyCustomController:action_2:
arguments:
$myCustomService: 
AppServiceMyCustomService:
arguments:
$config: {foo: 'baz'}

我可以在MyCustomService中使用一个config方法,并在每个控制器的操作中调用它。但它并没有那么优雅。

您可以通过执行类似的操作来定义不同的实例(例如:具有不同的配置(

services:
AppServiceMyCustomService $s1:
config: 
- foo: 'bar'

并像一样注入控制器动作

public function action_1(MyCustomService $s1)

参数按名称匹配,每次使用该签名(类名+参数名(定义参数时,Symfony都会注入正确的实例。

您还应该设置autowire并将控制器注册为服务

最新更新