内置的Symfon欧宝娱乐app下载地址y服务标签

编辑本页

服务标签该机制是由DependencyInjection组件标记需要特殊处理的服务,如控制台命令或Twig扩展。

本文展示了Symfony组件提供的最常见的标记,但是在您的应用程序中,第三方捆绑包可能提供了更多可用的标欧宝娱乐app下载地址记。

使用此命令显示应用程序中的标记服务:

1
PHP bin/控制台调试:container——tags

要搜索特定的标签,请使用搜索词重新运行此命令:

1
PHP bin/console debug:container——tag=form.type

资产包.包的名称按如下顺序设置:

  • 首先,标签的属性;
  • 然后,静态方法返回的值getDefaultPackageName ()如果定义;
  • 最后是服务名。
  • YAML
  • XML
  • PHP
1 2 3 4
服务:应用\ \ AvatarPackage资产:标签:-名称:assets.package,包:阿凡达

现在您可以使用阿凡达在模板中打包:

1
<imgsrc{{资产(“…', 'avatars')}}>

应用程序不需要处理这三个服务,而是需要一个通用服务app.lock服务,该服务将是这些服务之一的别名,具体取决于某些配置。多亏了auto_alias选项,则可以根据配置参数的值自动创建该别名。

考虑到配置参数叫做database_type的存在。然后是通用的app.lock服务的定义如下:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10
服务:app.mysql_lock:#……app.postgresql_lock:#……app.sqlite_lock:#……app.lock:标签:-名称:auto_alias,格式:“应用,% database_type % _lock”

格式选项定义用于构造为别名的服务名称的表达式。这个表达式可以使用任何容器参数(像往常一样,将它们的名称包装为字符)。

请注意

当使用auto_alias标记,将别名服务定义为私有并不是强制性的。然而,这样做(就像上面的例子一样)在大多数情况下是有意义的,可以防止直接访问这些服务,而不是使用通用服务别名。

PHP类预加载

  • YAML
  • XML
  • PHP
1 2 3
服务:App \ SomeNamespace \ SomeService:标签:(“container.no_preload”)

如果你添加一些服务标签container.no_preload作为另一个服务的参数container.no_preload标记也会自动应用到该服务。

PHP类预加载,此标记允许您定义应该预加载哪些PHP类。这可以通过让你的服务使用的一些类对所有请求始终可用来提高性能(直到服务器重新启动):

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
服务:App \ SomeNamespace \ SomeService:标签:-名称:“container.preload”类:“App \ SomeClass”-名称:“container.preload”类:“应用\ \ OtherClass一些”#……

主义事件篇文章。

主义事件篇文章。

形式猜测的过程。默认情况下,表单猜测是由基于验证元数据和Doctrine元数据(如果使用Doctrine)或Propel元数据(如果使用Propel)的“猜测者”完成的。

另请参阅

有关如何创建自己的类型猜测器的信息,请参见创建一个自定义类型猜测器

缓存:清晰命令。如果你的bundle缓存文件,你应该在缓存清理过程中添加一个自定义缓存清理器来清理这些文件。

为了注册你的自定义缓存清理器,首先你必须创建一个服务类:

12 3 4 5 6 7 8 9 10 11 12
/ / src /缓存/ MyClearer.php名称空间应用程序缓存使用欧宝娱乐app下载地址组件HttpKernelCacheClearerCacheClearerInterfaceMyClearer实现了CacheClearerInterface公共函数清晰的(字符串cacheDirectory//清除缓存}}

如果你在用默认的服务。yaml的配置,您的服务将自动标记为kernel.cache_clearer.但是,你也可以手动注册:

  • YAML
  • XML
  • PHP
1 2 3
服务:应用程序缓存\ \ MyClearer:标签:(kernel.cache_clearer)

缓存:热身或缓存:清晰命令(除非你通过——no-warmup缓存:清晰).它也会在处理请求时运行,如果其中一个命令还没有完成请求的话。

目的是初始化应用程序将需要的任何缓存,并防止第一个用户在动态生成缓存的情况下受到任何重要的“缓存命中”。

要注册自己的缓存预热器,首先创建一个实现CacheWarmerInterface接口:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/ / src /缓存/ MyCustomWarmer.php名称空间应用程序缓存使用应用程序喷火酒吧使用欧宝娱乐app下载地址组件HttpKernelCacheWarmerCacheWarmerInterfaceMyCustomWarmer实现了CacheWarmerInterface公共函数热身cacheDirectory/ /……做一些操作来“加热”你的缓存filesAndClassesToPreload= [];filesAndClassesToPreload[] = Bar::类;foreach(scandir (someCacheDir作为文件) {如果(!is_dir (文件someCacheDir' / '文件)) {filesAndClassesToPreload[] =文件;}}返回filesAndClassesToPreload;}公共函数isOptional()返回真正的;}}

热身()方法必须返回一个包含要预加载的文件和类的数组。文件必须是绝对路径,类必须是全限定类名。唯一的限制是文件必须存储在缓存目录中。如果不需要预加载任何东西,则返回一个空数组。

isOptional ()方法应返回true,如果可以在不调用此缓存预热器的情况下使用应用程序。在Sy欧宝娱乐app下载地址mfony中,默认情况下总是执行可选的暖器(您可以使用——no-optional-warmers选项)。

如果你在用默认的服务。yaml的配置,您的服务将自动标记为kernel.cache_warmer.但是,你也可以手动注册:

  • YAML
  • XML
  • PHP
1 2 3 4
服务:应用程序缓存\ \ MyCustomWarmer:标签:-名称:kernel.cache_warmer,优先级:0

请注意

优先级是可选的,其值为正整数或负整数,默认为0.数值越高,预热器执行得越早。

谨慎

如果您的缓存温暖器因为任何异常而执行失败,Symfony将不会尝试为下一个请求再次执行它。欧宝娱乐app下载地址因此,当缓存预热器生成的内容不可用时,您的应用程序和/或包应该做好准备。

除了您自己的缓存预热器外,Symfony组件和第三方包也为自己的目的定义了缓存欧宝娱乐app下载地址预热器。你可以用下面的命令列出它们:

1
PHP bin/console debug:container——tag=kernel.cache_warm . PHP bin/console debug:container——tag=kernel.cache_warm . PHP

EsiFragmentRenderer-创建一个实现FragmentRendererInterface,将其注册为服务,然后标记为kernel.fragment_renderer

语言环境

可以通过配置或使用容器参数、侦听器、路由参数或当前请求来设置和检索区域设置。

多亏了翻译合同中,区域设置可以通过服务设置。

要注册自己的语言环境感知服务,首先创建一个实现LocaleAwareInterface接口:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /地区/ MyCustomLocaleHandler.php名称空间应用程序语言环境使用欧宝娱乐app下载地址合同翻译LocaleAwareInterfaceMyCustomLocaleHandler实现了LocaleAwareInterface公共函数setLocale语言环境->语言环境=语言环境;}公共函数getLocale()返回->语言环境;}}

如果你在用默认的服务。yaml的配置,您的服务将自动标记为kernel.locale_aware.但是,你也可以手动注册:

  • YAML
  • XML
  • PHP
1 2 3
服务:App \场所\ MyCustomLocaleHandler:标签:(kernel.locale_aware)

MIME类型猜测器以防猜测者提供的Mime组件不符合你的需求。

额外的记录的属性。

内置的IntrospectionProcessor可用于添加触发记录器的文件、行、类和方法。

你可以全局添加处理器:

  • YAML
  • XML
  • PHP
1 2 3
服务:独白\处理器\ IntrospectionProcessor:标签:(monolog.processor)

提示

如果您的服务不是可调用的(使用__invoke ()),您可以添加方法属性中使用特定的方法。

方法还可以为特定处理程序添加处理器处理程序属性:

  • YAML
  • XML
  • PHP
1 2 3 4
服务:独白\处理器\ IntrospectionProcessor:标签:-名称:monolog.processor,处理程序:firephp

方法还可以为特定的日志记录通道添加处理器通道属性。方法注册处理器安全安全组件中使用的日志通道:

  • YAML
  • XML
  • PHP
1 2 3 4
服务:独白\处理器\ IntrospectionProcessor:标签:-名称:monolog.processor,渠道:安全

请注意

你不能同时使用处理程序而且通道作为处理程序的相同标记的属性在所有通道之间共享。

表达式函数提供程序用于路由表达式组件。使用这些提供程序,您可以向路由表达式语言添加自定义函数。

表达式函数提供程序用于安全表达式组件。使用这些提供程序,您可以向安全表达式语言添加自定义函数。

AbstractFactory并扩展您的自定义身份验证侦听器AbstractAuthenticationListener,那么您的自定义身份验证侦听器将自动应用此标记并自动运行。

NormalizerInterface而且DenormalizerInterface

详情请参见如何使用序列化器

默认归一化器的优先级可以在registerSerializerConfiguration ()方法。

translation.loader:

  • YAML
  • XML
  • PHP
1 2 3 4
服务:应用翻译\ \ MyCustomLoader:标签:-名称:translation.loader,别名:箱子

别名选项是必需的,而且非常重要:它定义了将用于使用该加载器的资源文件的文件“后缀”。例如,假设您有一些定制箱子您需要加载的格式。如果你有箱子文件的法语翻译消息域名,那么你可能有一个文件翻译/ messages.fr.bin

当Symf欧宝娱乐app下载地址ony尝试加载箱子文件时,它将路径传递给自定义加载器美元的资源论点。然后,您可以在该文件上执行所需的任何逻辑,以便加载翻译。

如果从数据库加载翻译,仍然需要一个资源文件,但它可能是空白的,或者包含一些关于从数据库加载这些资源的信息。文件是触发load ()方法。

翻译:提取命令时,它使用提取器从文件中提取翻译消息。默认情况下,Symfony框架有欧宝娱乐app下载地址一个TwigExtractor和一个PhpExtractor,这有助于从Twig模板和PHP文件中查找和提取翻译键。

您可以通过创建实现的类来创建自己的提取器ExtractorInterface并将服务标记为translation.extractor.标签有一个必需的选项:别名,它定义了提取器的名称:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/ / src / Acme / DemoBundle /翻译/ FooExtractor.php名称空间AcmeDemoBundle翻译使用欧宝娱乐app下载地址组件翻译ExtractorInterface使用欧宝娱乐app下载地址组件翻译MessageCatalogueFooExtractor实现了ExtractorInterface受保护的前缀/** *从模板目录提取翻译消息到编目。* /公共函数提取目录, MessageCatalogue目录/ /……/** *设置应用于新发现消息的前缀。* /公共函数setPrefix(字符串前缀->前缀=前缀;}}
  • YAML
  • XML
  • PHP
1 2 3 4
服务:应用翻译\ \ CustomExtractor:标签:-名称:translation.extractor,别名:喷火

译器从模板中提取所有消息后,将执行转储程序以将消息转储到特定格式的翻译文件中。

欧宝娱乐app下载地址Symfony已经提供了许多转储器:

您可以通过扩展创建自己的转储器FileDumper或实现DumperInterface并将服务标记为translation.dumper.标签有一个选项:别名这是用来确定应该使用哪个转储器的名称。

  • YAML
  • XML
  • PHP
1 2 3 4
服务:应用翻译\ \ JsonFileDumper:标签:-名称:translation.dumper,别名:json

twig.extension.如果你在用默认的服务。yaml的配置,该服务是自动注册和自动标记的。但是,你也可以手动注册:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9
服务:App \树枝\ AppExtension:标签:(twig.extension)#你可以选择定义扩展的优先级(default = 0)。优先级高的扩展被更早地注册。这主要是#用于注册覆盖其他扩展的晚期扩展。App \树枝\ AnotherExtension:标签:[{名称:twig.extension,优先级:-100年})

有关如何创建实际的树枝扩展类的信息,请参见树枝的文档欧宝体育电话关于这个话题或阅读如何编写一个自定义树枝扩展篇文章。

树枝装载机-FilesystemLoader.如果您需要从其他资源加载Twig模板,您可以为新的加载器创建一个服务并标记它twig.loader

如果你使用默认的服务。yaml的配置,由于自动配置,该服务将被自动标记。但是,你也可以手动注册:

  • YAML
  • XML
  • PHP
1 2 3 4
服务:App \树枝\ CustomLoader:标签:-名称:twig.loader,优先级:0

请注意

优先级是可选的,其值为正整数或负整数,默认为0.先试数较大的装载机。

惰性加载树枝扩展定义为常规服务,但它们需要标记twig.runtime.如果你在用默认的服务。yaml的配置,该服务是自动注册和自动标记的。但是,你也可以手动注册:

  • YAML
  • XML
  • PHP
1 2 3
服务:App \树枝\ AppExtension:标签:(twig.runtime)

ObjectInitializerInterface接口。然后,标记它与validator.initializer标签(它没有选项)。

有关示例,请参见DoctrineInitializer在教义桥里面上课。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 6.2支持通过苏禄人
欧宝娱乐app下载地址Symfony 6.2支持通过Les-Tilleuls.coop