【问题标题】:Symfony 2 - Service dynamic importsSymfony 2 - 服务动态导入
【发布时间】:2012-08-23 04:42:02
【问题描述】:

我将参数定义为:

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() 应该通过仅注入config1 参数来调用my_service

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

【问题讨论】:

  • 你们有哪些服务?您尝试注入哪个控制器?请让您的问题更加清晰

标签: php symfony yaml


【解决方案1】:

定义两个具有不同参数但类相同的服务并获取一个或另一个

【讨论】:

  • 我至少使用了 10 次。有没有办法分解它,因为我最终不得不一次又一次地重复重新注入一些其他类。
【解决方案2】:

在您的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);
    }
}

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

当然,你可以重写一些核心类,实现自动注入,增加数字部分,但这真的值得花时间吗?

【讨论】:

  • 可能不会。这就是我现在正在做的事情,但它不允许在构造函数中进行初始化:(所以我在被调用的函数中进行初始化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2023-01-04
相关资源
最近更新 更多