如何布置服务

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 3.0,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何布置服务

重写现有定义时(例如,当应用装饰器模式),原来的服务将会丢失:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
服务:app.mailer:类:AppBundle \梅勒#将旧的app.mailer定义替换为新的app.mailer定义#旧定义丢失app.mailer:AppBundle \ DecoratingMailer

大多数时候,这正是你想要做的。但有时,你可能想要装饰旧的。在这种情况下,应该保留旧服务,以便能够在新服务中引用它。这个配置替换了app.mailer用一个新的,但把旧的作为参考app.decorating_mailer.inner:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
服务:#……app.decorating_mailer:类:AppBundle \ DecoratingMailer装饰:app.mailer参数:(“@app.decorating_mailer.inner”)公众:

这里发生了什么:装修选项告诉容器app.decorating_mailer服务替换app.mailer服务。按照惯例,老年人app.mailer服务被重命名为app.decorating_mailer.inner,这样您就可以将其注入到新服务中。

提示

大多数情况下,装饰器应该声明为private,因为您不需要将其检索为app.decorating_mailer从容器里。

装饰的可见性app.mailer服务(这是新服务的别名)将仍然与原始服务相同app.mailer可见性。

请注意

生成的内部id基于装饰器服务的id (app.decorating_mailer这里),而不是装饰的服务(app.mailer这里)。这是强制的,以允许同一服务上有多个装饰器(它们需要有不同的生成的内部id)。

控件可以更改内部服务名称decoration_inner_name选择:

  • YAML
  • XML
  • PHP
1 2 3 4 5
服务:app.mailer:#……decoration_inner_name:app.decorating_mailer.wooz参数:(“@app.decorating_mailer.wooz”)

装饰的优先级

如果您想将多个decorator应用到一个服务中,您可以通过配置装饰的优先级来控制它们的顺序,这可以是任何整数(优先级较高的decorator将首先应用)。

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
foo:类:喷火栏:类:酒吧公众:装饰:喷火decoration_priority:5参数:(“@bar.inner”)记者:类:巴兹公众:装饰:喷火decoration_priority:1参数:(“@baz.inner”)

生成的代码如下所示:

1
->服务(“foo”] =巴兹(栏(Foo ())));
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。