使用一个工厂来创建服务
编辑该页面警告:你浏览的文档欧宝官网下载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许可证。