使用一个工厂来创建服务

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.0,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

使用一个工厂来创建服务

ob娱乐下载Symfony2的服务容器提供了一个强大的控制方式
创建对象,允许您指定参数传递给构造函数的调用方法和设置参数。有时,然而,这不会为你提供一切你需要构造对象。对于这种情况,您可以使用一个工厂来创建对象,告诉工厂的服务容器来调用一个方法而不是直接实例化对象。

假设您有一个工厂,配置并返回一个新的NewsletterManager对象:欧宝平台是合法的吗

1 2 3 4 5 6 7 8 9 10 11
欧宝平台是合法的吗NewsletterFactory{公共函数得到(){美元欧宝平台是合法的吗newsletterManager=欧宝平台是合法的吗NewsletterManager ();/ /……返回美元欧宝平台是合法的吗newsletterManager;}}

为了使欧宝平台是合法的吗NewsletterManager作为服务对象可用,您可以配置服务容器使用欧宝平台是合法的吗NewsletterFactory工厂类:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9
参数:#……欧宝平台是合法的吗newsletter_manager.class:欧宝平台是合法的吗NewsletterManager欧宝平台是合法的吗newsletter_factory.class:欧宝平台是合法的吗NewsletterFactory服务:欧宝平台是合法的吗newsletter_manager:类:“%欧宝平台是合法的吗 newsletter_manager.class %”factory_class:“%欧宝平台是合法的吗 newsletter_factory.class %”factory_method:得到

当你指定工厂(通过类来使用factory_class),将调用静态方法。如果工厂本身应该实例化,生成的调用对象的方法(在本例中),配置工厂本身作为一个服务:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11
参数:#……欧宝平台是合法的吗newsletter_manager.class:欧宝平台是合法的吗NewsletterManager欧宝平台是合法的吗newsletter_factory.class:欧宝平台是合法的吗NewsletterFactory服务:欧宝平台是合法的吗newsletter_factory:类:“%欧宝平台是合法的吗 newsletter_factory.class %”欧宝平台是合法的吗newsletter_manager:类:“%欧宝平台是合法的吗 newsletter_manager.class %”factory_service:欧宝平台是合法的吗newsletter_factoryfactory_method:得到

请注意

指定的工厂服务是其id名称和引用
服务本身。所以,你不需要使用@语法。

通过工厂方法的参数

如果你需要工厂方法传递参数,您可以使用参数选择服务容器内。例如,假设得到方法在前面的例子模板服务作为一个参数:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
参数:#……欧宝平台是合法的吗newsletter_manager.class:欧宝平台是合法的吗NewsletterManager欧宝平台是合法的吗newsletter_factory.class:欧宝平台是合法的吗NewsletterFactory服务:欧宝平台是合法的吗newsletter_factory:类:“%欧宝平台是合法的吗 newsletter_factory.class %”欧宝平台是合法的吗newsletter_manager:类:“%欧宝平台是合法的吗 newsletter_manager.class %”factory_service:欧宝平台是合法的吗newsletter_factoryfactory_method:得到参数:- - - - - -“@templating”
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。