Symfony 2 - 服务动态导入

时间:2012-08-28 16:04:26

标签: php symfony yaml

我将参数定义为:

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

如何在不必定义与控制器一样多的服务的情况下做到这一点?

2 个答案:

答案 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);
    }
}

这将是一个最佳解决方案。

当然,您可以覆盖一些核心类并实现数字部分递增的自动注入,但它真的值得花费它的时间吗?