如何创建服务别名和马克服务私人吗

编辑该页面

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

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

如何创建服务别名和马克服务私人吗

服务作为公共/私有

当定义一个服务,它可以公共私人。如果一个服务公共,这意味着你可以直接从容器在运行时访问它。例如,学说服务是一个公共服务:

1 2
/ /只能访问公共服务美元学说=美元容器- >get (“原则”);

但通常,服务访问使用依赖注入。在这种情况下,这些服务需要公众。

所以,除非你具体地说需要直接从容器通过访问服务$容器- > get (),最佳实践是使你的服务私人。事实上,默认的服务。yml配置默认配置服务私人。

您还可以控制公共选项service-by-service基础上:

  • YAML
  • XML
  • PHP
1 2 3 4 5
服务:#……AppBundle Foo \ \服务:公众:

私人服务是特殊的,因为他们允许容器优化是否以及如何实例化。这增加了容器的性能。它也会给你更好的错误:如果你想引用不存在的服务,您将得到一个明确的错误当你刷新任何页面,即使有问题的代码就不会在这个页面上运行。

现在服务是私人的,你不得获取服务直接从容器:

1 2 3
使用AppBundle\服务\喷火;美元容器- >get (Foo::类);

简单地说:可以标记为私人服务如果你不想直接从代码访问它。

然而,如果一个服务被标记为私有的,你仍然可以别名(见下文)来访问这个服务(通过别名)。

请注意

默认服务公众,但它被认为是一个很好的实践马克尽可能多的私人服务。

混叠

有时你可能想使用快捷键访问一些服务。可以通过混叠,此外,你甚至可以别名非公开的服务。

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
服务:#……AppBundle \ \ PhpMailer邮件:公众:app.mailer:别名:AppBundle \ \ PhpMailer邮件公众:真正的

这意味着当直接使用容器,你可以访问PhpMailer服务要求app.mailer服务是这样的:

1
美元容器- >get (“app.mailer”);/ /将返回一个PhpMailer实例

提示

在YAML中,您还可以使用别名服务的快捷方式:

1 2 3
服务:#……app.mailer:“@AppBundle \ \ PhpMailer邮件”

匿名服务

请注意

匿名服务仅支持XML和YAML配置格式。

3.3

YAML的特性来配置匿名服务是在Symfony 3.3中引入的。ob娱乐下载

在某些情况下,您可能想要阻止一个服务被用作其他服务的依赖。这可以通过创建一个匿名服务。这些服务就像常规的服务,但他们不定义一个ID和他们创建使用它们的地方。

下面的例子展示了如何将一个匿名服务到另一个服务:

  • YAML
  • XML
1 2 3 4 5 6 7 8 9
# app / config / services.yml服务:_defaults:自动装配:真正的AppBundle \ Foo:参数:- - - - - -服务!类:AppBundle \ AnonymousBar

使用一个匿名服务作为一个工厂是这样的:

  • YAML
  • XML
1 2 3 4 5 6 7
# app / config / services.yml服务:_defaults:自动装配:真正的AppBundle \ Foo:工厂:(服务!{类:AppBundle \ FooFactory},“constructFoo”]

不以为然的服务

一旦你决定反对使用服务(因为它是过时的或者你决定不维护它了),你可以轻视它的定义:

  • YAML
  • XML
  • PHP
1 2
AppBundle \服务\ OldService:弃用:“% service_id %”服务弃用商家名称/包名称2.8删除3.0

现在,每一次使用这项服务,弃用警告被触发,建议你停止或改变你的使用的服务。

的消息实际上是一个消息模板替换出现的% service_id %占位符服务id。你必须至少有一个发生的% service_id %在你的模板占位符。

请注意

弃用的信息是可选的。如果没有设置,Symfoob娱乐下载ny会显示这个默认的信息:弃用“% service_id %”服务。你应该停止使用它,因为它很快就会被删除。

提示

强烈建议您定义一个自定义消息因为默认一个太通用了。一个好的消息告诉当这个服务被弃用,直到当它将维护和替代的服务使用(如果有的话)。

(见服务修饰符如何装修服务),如果不修改弃用状态定义,它将继承地位的装饰的定义。

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