我将参数定义为:
parameters:
config1:
title: Title 1
data_proc: getDataOne
options: [things, stuff]
config2:
title: Title 2
data_proc: getDataTwo
options: [things, stuff]
#...
服务定义为
my_service:
class: Me\MyBundle\Services\MyService
arguments:
- @security.context
- @doctrine.dbal.my_connection
- %config% # the parameter that I'd like to be dynamic
控制器喜欢
class ProduitController extends Controller
{
public function list1Action()
{
$ssrs = $this->get('my_service'); // with config1 params
# ...
}
public function list2Action()
{
$ssrs = $this->get('my_service'); // with config2 params
# ...
}
#...
}
使用my_service
的几个控制器
我的list1Action()
应通过仅注入my_service
参数
config1
如何在不必定义与控制器一样多的服务的情况下做到这一点?
答案 0 :(得分:2)
使用不同的参数定义两个服务,但使用相同的类并获取一个或另一个
答案 1 :(得分:1)
在您的Me\MyBundle\Services\MyService
中,您可以定义公共方法,该方法将设置新参数(例如setParameters($parameters)
)。然后在你的控制器中你可以这样做:
class ProduitController extends Controller
{
public function list1Action()
{
$config = $this->container->getParameter('config1');
$ssrs = $this->get('my_service')->setParameters($config);
}
public function list2Action()
{
$config = $this->container->getParameter('config2');
$ssrs = $this->get('my_service')->setParameters($config);
}
}
这将是一个最佳解决方案。
当然,您可以覆盖一些核心类并实现数字部分递增的自动注入,但它真的值得花费它的时间吗?