在Symfony2中创建服务容器时,您通常会将“静态”参数(如其他类等)传递给其构造函数。是否可以将参数传递给Symony2容器构造函数
不过,我想创建一个工厂,因此我需要能够传递一个动态参数的服务构造。
我发现的例子(例如http://symfony.com/doc/current/cookbook/service_container/factories.html)都以静态参数作为参数结束。
但是我必须做的,如果我想我厂决定根据返回的对象(例如)用户输入?
在Symfony2中创建服务容器时,您通常会将“静态”参数(如其他类等)传递给其构造函数。是否可以将参数传递给Symony2容器构造函数
不过,我想创建一个工厂,因此我需要能够传递一个动态参数的服务构造。
我发现的例子(例如http://symfony.com/doc/current/cookbook/service_container/factories.html)都以静态参数作为参数结束。
但是我必须做的,如果我想我厂决定根据返回的对象(例如)用户输入?
我有一些问题,理解为什么服务工厂不应该在你的情况下工作。你需要返回彼此无关的不同服务类吗?
我从工厂例子中看到的是什么,你可以做这样的事情:
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
组件的内部组件,但我认为如果其他方法不能解决您的问题。
问候,
马特