如何配置一个服务配置器

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.8,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何配置一个服务配置器

服务配置器服务容器的功能,允许您使用一个可调用配置服务实例化后。

服务配置器可以被使用,例如,当你有一个服务,需要复杂的设置基于来自不同来源的配置设置/服务。使用外部配置器,您可以维护服务实现清洁,并保持与其他对象提供所需的配置。

另一个用例是当你有多个对象共享一个公共配置或者应该配置在运行时以类似的方式。

例如,假设您有一个应用程序,你不同类型的电子邮件发送给用户。电子邮件是通过不同的格式器,可以启用或不取决于一些动态应用程序设置。你开始定义一个欧宝app在哪里找NewsletterManager类是这样的:

1 2 3 4 5 6 7 8 9 10 11 12
欧宝app在哪里找NewsletterManager实现了EmailFormatterAwareInterface{受保护的美元梅勒;受保护的美元enabledFormatters;公共函数setEnabledFormatters(数组美元enabledFormatters){美元- >enabledFormatters =美元enabledFormatters;}/ /……}

也是一个GreetingCardManager类:

1 2 3 4 5 6 7 8 9 10 11 12
GreetingCardManager实现了EmailFormatterAwareInterface{受保护的美元梅勒;受保护的美元enabledFormatters;公共函数setEnabledFormatters(数组美元enabledFormatters){美元- >enabledFormatters =美元enabledFormatters;}/ /……}

如前所述,我们的目标是设置格式器在运行时根据应用程序设置。要做到这一点,你也有一个EmailFormatterManager类负责加载和验证格式器在应用程序中启用:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
EmailFormatterManager{/ /……公共函数getEnabledFormatters(){/ /代码配置格式器使用美元enabledFormatters=数组(…);/ /……返回美元enabledFormatters;}}

如果你的目标是避免夫妇欧宝app在哪里找NewsletterManagerGreetingCardManagerEmailFormatterManager,那么您可能想要创建一个配置器类来配置这些实例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
EmailConfigurator{私人美元formatterManager;公共函数__construct(EmailFormatterManager美元formatterManager){美元- >formatterManager =美元formatterManager;}公共函数配置(EmailFormatterAwareInterface美元emailManager){美元emailManager- >setEnabledFormatters (美元- >formatterManager- >getEnabledFormatters ());}/ /……}

EmailConfigurator的工作是注入启用格式器欧宝app在哪里找NewsletterManagerGreetingCardManager因为他们没有意识到启用格式器从何而来。另一方面,EmailFormatterManager关于启用格式器的知识,如何加载它们,保持单一责任原则。

提示

虽然这个示例使用一个PHP类方法,配置器可以是任何有效的PHP调用,包括函数、静态方法和服务的方法。

使用配置器

您可以配置服务配置器使用配置器选择:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# app / config / services.yml服务:app.email_formatter_manager:类:AppBundle \ \ EmailFormatterManager邮件#……app.email_configurator:类:AppBundle \ \ EmailConfigurator邮件参数:(“@app.email_formatter_manager”)#……app.欧宝app在哪里找newsletter_manager:类:AppBundle \ \ N欧宝app在哪里找ewsletterManager邮件参数:(“@mailer”)配置:(“@app.email_configurator”,配置)app.greeting_card_manager:类:AppBundle \ \ GreetingCardManager邮件参数:(“@mailer”)配置:(“@app.email_configurator”,配置)

就是这样!当请求app.欧宝app在哪里找newsletter_managerapp.greeting_card_manager服务,首先将被传递到创建的实例EmailConfigurator::配置()方法。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。