如何创建服务别名和马克服务私人吗
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何创建服务别名和马克服务私人吗
服务作为公共/私有
当定义一个服务,它可以公共或私人。如果一个服务公共,这意味着你可以直接从容器在运行时访问它。例如,学说
服务是一个公共服务:
1 2
/ /只能访问公共服务美元学说=美元容器- >get (“原则”);
但通常,服务访问使用依赖注入。在这种情况下,这些服务不需要公众。
所以,除非你具体地说需要直接从容器通过访问服务$容器- > get ()
,最佳实践是使你的服务私人。事实上,默认的服务。yaml的配置默认配置服务私人。
您还可以控制公共
选项service-by-service基础上:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/ services.yaml服务:#……应用程序服务\ \ Foo:公众:假
私人服务是特殊的,因为他们允许容器优化是否以及如何实例化。这增加了容器的性能。它也会给你更好的错误:如果你想引用不存在的服务,您将得到一个明确的错误当你刷新任何页面,即使有问题的代码就不会在这个页面上运行。
现在服务是私人的,你不得获取服务直接从容器:
1 2 3
使用应用程序\服务\喷火;美元容器- >get (Foo::类);
简单地说:可以标记为私人服务如果你不想直接从代码访问它。
然而,如果一个服务被标记为私有的,你仍然可以别名(见下文)来访问这个服务(通过别名)。
混叠
有时你可能想使用快捷键访问一些服务。可以通过混叠,此外,你甚至可以别名非公开的服务。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/ services.yaml服务:#……邮件\ App \ PhpMailer:公众:假app.mailer:别名:应用\ \ PhpMailer邮件公众:真正的
这意味着当直接使用容器,你可以访问PhpMailer
服务要求app.mailer
服务是这样的:
1
美元容器- >get (“app.mailer”);/ /将返回一个PhpMailer实例
提示
在YAML中,您还可以使用别名服务的快捷方式:
1 2 3 4
#配置/ services.yaml服务:#……app.mailer:“@App \ \ PhpMailer邮件”
匿名服务
请注意
匿名服务仅支持XML和YAML配置格式。
在某些情况下,您可能想要阻止一个服务被用作其他服务的依赖。这可以通过创建一个匿名服务。这些服务就像常规的服务,但他们不定义一个ID和他们创建使用它们的地方。
下面的例子展示了如何将一个匿名服务到另一个服务:
- YAML
- XML
1 2 3 4 5 6
#配置/ services.yaml服务:App \ Foo:参数:- - - - - -服务!类:App \ AnonymousBar
使用一个匿名服务作为一个工厂是这样的:
- YAML
- XML
1 2 3 4
#配置/ services.yaml服务:App \ Foo:工厂:(服务!{类:App \ FooFactory},“constructFoo”]
不以为然的服务
一旦你决定反对使用服务(因为它是过时的或者你决定不维护它了),你可以轻视它的定义:
- YAML
- XML
- PHP
1 2 3
#配置/ services.yaml应用程序服务\ \ OldService:弃用:的“% service_id %”服务是弃用自2.8和将是删除在3.0。
现在,每一次使用这项服务,弃用警告被触发,建议你停止或改变你的使用的服务。
的消息实际上是一个消息模板替换出现的% service_id %
占位符服务id。你必须至少有一个发生的% service_id %
在你的模板占位符。
请注意
弃用的信息是可选的。如果没有设置,Symfoob娱乐下载ny会显示这个默认的信息:弃用“% service_id %”服务。你应该停止使用它,因为它很快就会被删除。
。
提示
强烈建议您定义一个自定义消息因为默认一个太通用了。一个好的消息告诉当这个服务被弃用,直到当它将维护和替代的服务使用(如果有的话)。
(见服务修饰符如何装修服务),如果不修改弃用状态定义,它将继承地位的装饰的定义。