2012-04-23 88 views
2

在Symfony2中创建服务容器时,您通常会将“静态”参数(如其他类等)传递给其构造函数。是否可以将参数传递给Symony2容器构造函数

不过,我想创建一个工厂,因此我需要能够传递一个动态参数的服务构造。

我发现的例子(例如http://symfony.com/doc/current/cookbook/service_container/factories.html)都以静态参数作为参数结束。

但是我必须做的,如果我想我厂决定根据返回的对象(例如)用户输入?

回答

3

我有一些问题,理解为什么服务工厂不应该在你的情况下工作。你需要返回彼此无关的不同服务类吗?

我从工厂例子中看到的是什么,你可以做这样的事情:

class NewsletterFactory 
{ 
    public function __constructor(...) 
    { 
     // Receive arguments needed to create the service below 
    } 

    public function get() 
    { 
     // Say the variable $userInput exists and is derived from constructor 
     if ($userInput === 'string') 
      return new NewsletterManager($dynamicArgument1); 

     if ($userInput === 'integer') 
      return new AnotherNewsletterManager($dynamicArgument2); 

     return new DefaultNewsletterManager(); 
    } 
} 

现在,如果这个不适合你的需求。你也可以创建一个服务,如CustomFactory,返回你所需要的。返回的内容不是直接的服务,所以你可以做任何你想做的事情。但是这会阻止您从依赖容器请求由CustomFactory创建的对象。

上类似于是FormFactory。它是用于实例化表单类型的工厂。但FormFactory更强大,因为它与一个依赖注入标记和一个编译器通道相结合,它将每种类型注册到依赖注入系统中,以便它们可以被自己检索。我并不是所有Form组件的内部组件,但我认为如果其他方法不能解决您的问题。

问候,
马特

相关问题