如何装修服务

编辑该页面

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

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

如何装修服务

当覆盖现有的定义(例如,当应用装饰器模式),原始服务丢失:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
服务:app.mailer:类:AppBundle \梅勒#这个替换旧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,所以你可以将它注入你的新服务。

提示

大多数时候,装饰应该宣布私人,你不需要检索它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.decorating_mailer:#……decoration_inner_name:app.decorating_mailer.wooz参数:(“@app.decorating_mailer.wooz”)

装饰的优先级

如果你想申请多个装饰服务,您可以控制他们的订单通过配置的优先级装饰,这可以是任意整数(先用更高的优先级将被应用修饰符)。

  • YAML
  • XML
  • PHP
1 2 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 ())));
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。