如何创建服务别名和标记服务为私有

编辑本页

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

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

如何创建服务别名和标记服务为私有

将服务标记为公共/私有

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

1 2
//只有公共服务可以通过这种方式访问学说容器->get (“原则”);

但通常,服务是通过依赖注入.在这种情况下,这些服务确实如此需要公开。

所以除非你具体地说需要直接从容器通过访问服务集装箱- > get (),最好的做法是让你的服务私人.事实上,所有的服务都是私人默认情况下。

您还可以控制公共按服务分类选择:

  • 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邮件”

弃用服务别名

5.1

而且版本在Symfony 5.1中引入了选项。ob娱乐下载在5.1之前,您必须使用弃用:真已弃用:'自定义消息'

如果你决定弃用某个服务别名(因为它已经过时或者你决定不再维护它),你可以弃用它的定义:

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14
app.mailer:别名:“App \邮件\ PhpMailer”#输出以下通用弃用消息:#自acme/package 1.2以来:“app.mailer”服务别名已弃用。您应该停止使用它,因为它将在未来被删除弃用:包:“acme /包”版本:“1.2”#你也可以定义一个自定义的弃用消息(%alias_id%占位符可用)弃用:包:“acme /包”版本:“1.2”信息:“%alias_id%”别名已弃用。不要再用了。”

现在,每次使用此服务别名时,都会触发一个弃用警告,建议您停止或更改对该别名的使用。

消息实际上是一个消息模板,用于替换出现的% alias_id %由服务别名id表示的占位符。你必须至少发生过一次% alias_id %模板中的占位符。

匿名服务

在某些情况下,您可能希望防止某个服务被用作其他服务的依赖项。这可以通过创建匿名服务来实现。这些服务与常规服务类似,但它们不定义ID,而是在使用它们的地方创建。

以注入匿名服务为例:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
#配置/ services.yaml服务:App \ Foo:参数:-服务!类:App \ AnonymousBar

请注意

匿名服务从配置中定义的默认值继承提供的定义。因此,在执行匿名服务时,您需要显式地将服务标记为自动连接或自动配置,例如:inline_service (Foo::类)- >自动装配()——> autoconfigure ()

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

  • YAML
  • XML
  • PHP
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%”服务已弃用。你应该停止使用它,因为它很快就会被删除。

提示

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

有关服务装饰器(请参阅如何布置服务),如果该定义没有修改已弃用状态,它将从被修饰的定义继承该状态。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。