内置的Symfon欧宝娱乐app下载地址y服务标签
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.4,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
服务标签该机制是由DependencyInjection组件标记需要特殊处理的服务,如控制台命令或Twig扩展。
这些是Symfony组件提供的最常见的标记,但在您的应用程序中,第三方包可能提供更多可欧宝娱乐app下载地址用的标记:
assetic.asset
目的:向当前资产管理器注册资产
assetic.factory_worker
目的:增加一个工厂工人
Factory worker是一个类实现Assetic \ \工厂工人\ WorkerInterface
.它的过程(美元资产)
方法在创建资产后为每个资产调用。您可以修改资产,甚至返回一个新的资产。
为了添加一个新的worker,首先创建一个类:
1 2 3 4 5 6 7 8 9 10 11
使用Assetic\资产\AssetInterface;使用Assetic\工厂\工人\WorkerInterface;类mywork实现了WorkerInterface{公共函数过程(AssetInterface$资产){/ /……更改$asset或返回一个新的}}
然后把它注册为一个带标签的服务:
- YAML
- XML
- PHP
1 2 3
服务:AppBundle \ Assetic \ CustomWorker:标签:(assetic.factory_worker)
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ Assetic \ CustomWorker”><标签的名字=“assetic.factory_worker”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\Assetic\CustomWorker;$容器->注册(CustomWorker::类)->addTag (“assetic.factory_worker”);
assetic.filter
目的:注册一个过滤器
AsseticBundle使用这个标记来注册常用的过滤器。您还可以使用这个标记来注册您自己的过滤器。
首先,你需要创建一个过滤器:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用Assetic\资产\AssetInterface;使用Assetic\过滤器\FilterInterface;类MyFilter实现了FilterInterface{公共函数filterLoad(AssetInterface$资产){$资产->setContent (“警报(“哟”);”.$资产->getContent ());}公共函数filterDump(AssetInterface$资产){/ /……}}
其次,定义一个服务:
- YAML
- XML
- PHP
1 2 3 4
服务:AppBundle \ Assetic \ CustomFilter:标签:-{名称:assetic.filter,别名:my_filter}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ Assetic \ CustomFilter”><标签的名字=“assetic.filter”别名=“my_filter”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\Assetic\CustomFilter;$容器->注册(CustomFilter::类)->addTag (“assetic.filter”, (“别名”= >“my_filter”]);
最后,应用滤镜:
1 2 3 4 5 6
{%javascript'@AcmeBaseBundle/Resources/public/js/global.js' filter='my_filter' %}<脚本src="{{asset_url}}">脚本>{%endjavascripts%}
您还可以通过assetic.filters.my_filter.apply_to
配置选项,如下所示:如何应用一个汇编过滤器到特定的文件扩展名.要做到这一点,必须在单独的xml配置文件中定义筛选器服务,并通过assetic.filters.my_filter.resource
配置的关键。
assetic.formula_loader
目的:在当前资产管理器中添加公式加载器
公式加载器是一个类实现工厂Assetic \ \程序\ FormulaLoaderInterface
接口。该类负责从特定类型的资源(例如,树枝模板)加载资产。Assetic为PHP和Twig模板提供加载器。
一个别名
属性定义加载器的名称。
auto_alias
目的:根据容器参数的值定义别名
考虑下面的配置,它定义了三个不同但相关的服务:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10
服务:app.mysql_lock:类:AppBundle \ \ MysqlLock锁公众:假app.postgresql_lock:类:AppBundle \ \ PostgresqlLock锁公众:假app.sqlite_lock:类:AppBundle \ \ SqliteLock锁公众:假
12 3 4 5 6 7 8 9 10 11 12 13 14 15
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“app.mysql_lock”公共=“假”类=“AppBundle \ \ MysqlLock锁”/><服务id=“app.postgresql_lock”公共=“假”类=“AppBundle \ \ PostgresqlLock锁”/><服务id=“app.sqlite_lock”公共=“假”类=“AppBundle \ \ SqliteLock锁”/>服务>容器>
1 2 3 4 5 6 7
使用AppBundle\锁\MysqlLock;使用AppBundle\锁\PostgresqlLock;使用AppBundle\锁\SqliteLock;$容器->注册(“app.mysql_lock”, MysqlLock::类)->setPublic (假);$容器->注册(“app.postgresql_lock”, PostgresqlLock::类)->setPublic (假);$容器->注册(“app.sqlite_lock”, SqliteLock::类)->setPublic (假);
应用程序不需要处理这三个服务,而是需要一个通用服务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”}
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“app.mysql_lock”公共=“假”类=“AppBundle \ \ MysqlLock锁”/><服务id=“app.postgresql_lock”公共=“假”类=“AppBundle \ \ PostgresqlLock锁”/><服务id=“app.sqlite_lock”公共=“假”类=“AppBundle \ \ SqliteLock锁”/><服务id=“app.lock”><标签的名字=“auto_alias”格式=“应用,% database_type % _lock”/>服务>服务>容器>
1 2 3 4 5 6 7 8 9 10
使用AppBundle\锁\MysqlLock;使用AppBundle\锁\PostgresqlLock;使用AppBundle\锁\SqliteLock;$容器->注册(“app.mysql_lock”, MysqlLock::类)->setPublic (假);$容器->注册(“app.postgresql_lock”, PostgresqlLock::类)->setPublic (假);$容器->注册(“app.sqlite_lock”, SqliteLock::类)->setPublic (假);$容器->注册(“app.lock”)->addTag (“auto_alias”, (“格式”= >的应用,% database_type % _lock]);
的格式
选项定义用于构造为别名的服务名称的表达式。这个表达式可以使用任何容器参数(像往常一样,将它们的名称包装为%
字符)。
请注意
当使用auto_alias
标记,将别名服务定义为私有并不是强制性的。然而,这样做(就像上面的例子一样)在大多数情况下是有意义的,可以防止直接访问这些服务,而不是使用通用服务别名。
请注意
需要手动添加欧宝娱乐app下载地址
编译器传递给容器以使该特性工作。
container.hot_path
3.4
的container.hot_path
标签是在Symfony 3.4中引入的。欧宝娱乐app下载地址
目的:添加到始终需要的服务列表
该标记标识始终需要的服务。它只应用于非常短的引导服务列表(比如路由器
,event_dispatch
,http_kernel
,request_stack
等)。然后,将其传播到这些服务的所有依赖项,对于事件侦听器有一个特殊情况,只有列出的事件被传播到相关的侦听器。
它将在缓存中替换生成的服务工厂,PHP自动加载为普通内联include_once
.这样做的好处是完全绕过了服务及其类层次结构的自动加载器。结果是显著的性能改进。
使用此标记时要非常谨慎,必须确保始终使用带标记的服务。
controller.argument_value_resolver
目的:为控制器参数注册一个值解析器请求
值解析器实现ArgumentValueResolverInterface和用于解析控制器的参数值,如下所示:扩展动作参数解析.
form.type_guesser
目的:为“表单类型猜测”添加自己的逻辑
标记允许您将自己的逻辑添加到形式猜测的过程。默认情况下,表单猜测是由基于验证元数据和Doctrine元数据(如果使用Doctrine)或Propel元数据(如果使用Propel)的“猜测者”完成的。
另请参阅
有关如何创建自己的类型猜测器的信息,请参见创建一个自定义类型猜测器.
kernel.cache_clearer
目的:将您的服务注册为清理缓存过程中调用的服务
每次调用都会发生缓存清理缓存:清晰
命令。如果你的bundle缓存文件,你应该在缓存清理过程中添加自定义缓存清理器来清除这些文件。
为了注册你的自定义缓存清理器,首先你必须创建一个服务类:
12 3 4 5 6 7 8 9 10 11 12
/ / src / AppBundle /缓存/ MyClearer.php名称空间AppBundle\缓存;使用欧宝娱乐app下载地址\组件\HttpKernel\CacheClearer\CacheClearerInterface;类MyClearer实现了CacheClearerInterface{公共函数清晰的($cacheDirectory){//清除缓存}}
如果你在用默认的服务。yml配置,您的服务将自动标记为kernel.cache_clearer
.但是,你也可以手动注册:
- YAML
- XML
- PHP
1 2 3
服务:AppBundle \ \ MyClearer缓存:标签:(kernel.cache_clearer)
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ \ MyClearer缓存”><标签的名字=“kernel.cache_clearer”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\缓存\MyClearer;$容器->注册(MyClearer::类)->addTag (“kernel.cache_clearer”);
kernel.cache_warmer
目的:注册在缓存升温过程中被调用的服务
方法时,缓存升温都会发生缓存:热身
或缓存:清晰
命令(除非你通过——no-warmup
来缓存:清晰
).它也会在处理请求时运行,如果其中一个命令还没有完成请求的话。
目的是初始化应用程序将需要的任何缓存,并防止第一个用户在动态生成缓存的情况下受到任何重要的“缓存命中”。
要注册自己的缓存预热器,首先创建一个实现CacheWarmerInterface接口:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src / Acme / MainBundle /缓存/ MyCustomWarmer.php名称空间AppBundle\缓存;使用欧宝娱乐app下载地址\组件\HttpKernel\CacheWarmer\CacheWarmerInterface;类MyCustomWarmer实现了CacheWarmerInterface{公共函数热身($cacheDirectory){/ /……做一些操作来“加热”你的缓存}公共函数isOptional(){返回真正的;}}
的isOptional ()
方法应返回true,如果可以在不调用此缓存预热器的情况下使用应用程序。在Sy欧宝娱乐app下载地址mfony中,默认情况下总是执行可选的暖器(您可以使用——no-optional-warmers
选项)。
如果你在用默认的服务。yml配置,您的服务将自动标记为kernel.cache_warmer
.但是,你也可以手动注册:
- YAML
- XML
- PHP
1 2 3 4
服务:AppBundle \ \ MyCustomWarmer缓存:标签:-{名称:kernel.cache_warmer,优先级:0}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ \ MyCustomWarmer缓存”><标签的名字=“kernel.cache_warmer”优先级=“0”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\缓存\MyCustomWarmer;$容器->注册(MyCustomWarmer::类)->addTag (“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
kernel.event_listener
目的:在Symfony中收听不同的事件/钩子欧宝娱乐app下载地址
在Symfony应用程序执行期间,会触发不同的事件,欧宝娱乐app下载地址您还可以分派自定义事件。这个标记允许您这样做钩你自己的类到任何这些事件中。
有关此侦听器的完整示例,请阅读事件和事件监听器篇文章。
kernel.event_subscriber
目的:在Symfony中订阅一组不同的事件/钩子欧宝娱乐app下载地址
这是创建事件侦听器的另一种方法,也是推荐的方法(而不是使用kernel.event_listener
).看到事件和事件监听器.
kernel.fragment_renderer
目的:增加新的HTTP内容呈现策略
添加一个新的渲染策略-除了核心策略一样EsiFragmentRenderer
-创建一个实现FragmentRendererInterface,将其注册为服务,然后标记为kernel.fragment_renderer
.
kernel.reset
目的:清理请求之间的服务
在kernel.terminate
事件时,Sym欧宝娱乐app下载地址fony将查找任何标记为kernel.reset
标记来重新初始化它们的状态。方法中配置名称的方法可以实现这一点方法
标记的参数。
当在应用服务器中运行项目时,这非常有用,这些应用服务器在请求之间重用Symfony应用程序以提高性能。欧宝娱乐app下载地址例如,此标记应用于内置数据收集器删除他们所有的信息。
monolog.logger
目的:使用Monolog的自定义日志通道
Monolog允许您在几个日志通道之间共享它的处理程序。记录器服务使用通道应用程序
但是您可以在将记录器注入服务时更改通道。
- YAML
- XML
- PHP
1 2 3 4 5
服务:AppBundle \ Log \ customlog:参数:(“@logger”)标签:-{名称:monolog.logger,渠道:应用程序}
12 3 4 5 6 7 8 9 10 11 12 13
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ \ customlog日志”><论点类型=“服务”id=“日志”/><标签的名字=“monolog.logger”通道=“应用程序”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\日志\customlog;使用欧宝娱乐app下载地址\组件\DependencyInjection\参考;$容器->注册(customlog::类)->addArgument (新引用(“日志”))->addTag (“monolog.logger”, (“通道”= >“应用程序”]);
提示
您还可以在配置中配置自定义通道,并直接从服务容器检索相应的记录器服务(请参阅如何将消息记录到不同的文件).
monolog.processor
目的:添加用于日志记录的自定义处理器
Monolog允许您在记录器或处理程序中添加处理器,以便在记录中添加额外的数据。类中添加一些额外数据后,处理器必须返回该记录作为参数额外的
记录的属性。
内置的IntrospectionProcessor
可用于添加触发记录器的文件、行、类和方法。
你可以全局添加处理器:
- YAML
- XML
- PHP
1 2 3
服务:独白\处理器\ IntrospectionProcessor:标签:(monolog.processor)
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“独白\ \ IntrospectionProcessor处理器”><标签的名字=“monolog.processor”/>服务>服务>容器>
1 2 3 4 5 6
使用独白\处理器\IntrospectionProcessor;$容器->注册(IntrospectionProcessor::类)->addTag (“monolog.processor”);
提示
如果您的服务不是可调用的(使用__invoke ()
),您可以添加方法
属性中使用特定的方法。
方法还可以为特定处理程序添加处理器处理程序
属性:
- YAML
- XML
- PHP
1 2 3 4
服务:独白\处理器\ IntrospectionProcessor:标签:-{名称:monolog.processor,处理程序:firephp}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“独白\ \ IntrospectionProcessor处理器”><标签的名字=“monolog.processor”处理程序=“firephp”/>服务>服务>容器>
1 2 3 4 5 6
使用独白\处理器\IntrospectionProcessor;$容器->注册(IntrospectionProcessor::类)->addTag (“monolog.processor”, (的处理程序= >“firephp”]);
方法还可以为特定的日志记录通道添加处理器通道
属性。方法注册处理器安全
安全组件中使用的日志通道:
- YAML
- XML
- PHP
1 2 3 4
服务:独白\处理器\ IntrospectionProcessor:标签:-{名称:monolog.processor,渠道:安全}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“独白\ \ IntrospectionProcessor处理器”><标签的名字=“monolog.processor”通道=“安全”/>服务>服务>容器>
1 2 3 4 5 6
使用独白\处理器\IntrospectionProcessor;$容器->注册(IntrospectionProcessor::类)->addTag (“monolog.processor”, (“通道”= >“安全”]);
请注意
你不能同时使用处理程序
而且通道
作为处理程序的相同标记的属性在所有通道之间共享。
routing.loader
目的:注册加载路由的自定义服务
要启用自定义路由加载器,请将其作为常规服务添加到您的配置中,并使用routing.loader
:
- YAML
- XML
- PHP
1 2 3
服务:AppBundle \ \ CustomLoader路由:标签:(routing.loader)
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ \ CustomLoader路由”><标签的名字=“routing.loader”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\路由\CustomLoader;$容器->注册(CustomLoader::类)->addTag (“routing.loader”);
有关更多信息,请参见如何创建自定义路由加载器.
routing.expression_language_provider
目的:为路由中的表达式语言函数注册一个提供者
此标记用于自动注册表达式函数提供程序用于路由表达式组件。使用这些提供程序,您可以向路由表达式语言添加自定义函数。
security.expression_language_provider
目的:在安全中为表达式语言函数注册一个提供者
此标记用于自动注册表达式函数提供程序用于安全表达式组件。使用这些提供程序,您可以向安全表达式语言添加自定义函数。
security.remember_me_aware
目的:允许“记得我”身份验证
该标记在内部使用,以允许remember-me身份验证工作。如果您有一个自定义身份验证方法,其中用户可以通过“记住我”身份验证,那么您可能需要使用这个标记。
如果您的自定义身份验证工厂扩展AbstractFactory并扩展您的自定义身份验证侦听器AbstractAuthenticationListener,那么您的自定义身份验证侦听器将自动应用此标记并自动运行。
security.voter
目的:向Symfony的授权逻辑中添加自定义投票人欧宝娱乐app下载地址
当你打电话时isGranted ()
在Sy欧宝娱乐app下载地址mfony的授权检查器上,一个“投票者”系统在幕后被用来决定用户是否应该拥有访问权限。的security.voter
标签允许您将自己的自定义投票人添加到该系统。
有关更多信息,请阅读如何使用选民检查用户权限篇文章。
serializer.normalizer
目的:在Serializer服务中注册一个新的规范化器
标记的类应该实现NormalizerInterface而且DenormalizerInterface.
详情请参见如何使用序列化器.
默认归一化器的优先级可以在registerSerializerConfiguration ()方法。
swiftmailer.default.plugin
目的:注册自定义SwiftMailer Plugin
如果你正在使用一个自定义的SwiftMailer插件(或者想要创建一个),你可以通过为你的插件创建一个服务并标记它来注册到SwiftMailerswiftmailer.default.plugin
(它没有选择)。
请注意
默认的
在这个标记中是邮件发送者的名称。如果您配置了多个邮件程序,或者由于某种原因更改了默认的邮件程序名称,那么您应该将其更改为您的邮件程序的名称,以便使用此标记。
SwiftMailer插件必须实现Swift_Events_EventListener
接口。有关插件的更多信息,请参见SwiftMailer的插件文档欧宝体育电话.
几个SwiftMailer插件是Symfony的核心,可以通过不同的配置激活。欧宝娱乐app下载地址详细信息请参见Mailer配置参考(SwiftmailerBundle).
templating.helper
目的:让你的服务在PHP模板中可用
要启用自定义模板帮助器,请将其作为常规服务添加到您的配置中,并将其标记为templating.helper
并定义一个别名
属性(helper可以通过模板中的别名访问):
- YAML
- XML
- PHP
1 2 3 4
服务:AppBundle \模板\ AppHelper:标签:-{名称:templating.helper,别名:alias_name}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \模板\ AppHelper”><标签的名字=“templating.helper”别名=“alias_name”/>服务>服务>容器>
1 2 3 4 5
使用AppBundle\模板\AppHelper;$容器->注册(AppHelper::类)->addTag (“templating.helper”, (“别名”= >“alias_name”]);
translation.loader
目的:注册加载翻译的自定义服务
默认情况下,从文件系统中以各种不同的格式(YAML、XLIFF、PHP等)加载翻译。
现在,将加载器注册为服务并标记为translation.loader
:
- YAML
- XML
- PHP
1 2 3 4
服务:AppBundle \ \ MyCustomLoader翻译:标签:-{名称:translation.loader,别名:箱子}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ \ MyCustomLoader翻译”><标签的名字=“translation.loader”别名=“本”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\翻译\MyCustomLoader;$容器->注册(MyCustomLoader::类)->addTag (“translation.loader”, (“别名”= >“本”]);
的别名
选项是必需的,而且非常重要:它定义了将用于使用该加载器的资源文件的文件“后缀”。例如,假设您有一些定制箱子
您需要加载的格式。如果你有箱子
文件的法语翻译消息
域名,那么你可能有一个文件app /资源/翻译/ messages.fr.bin
.
当Symf欧宝娱乐app下载地址ony尝试加载箱子
文件时,它将路径传递给自定义加载器美元的资源
论点。然后,您可以在该文件上执行所需的任何逻辑,以便加载翻译。
如果从数据库加载翻译,仍然需要一个资源文件,但它可能是空白的,或者包含一些关于从数据库加载这些资源的信息。文件是触发load ()
方法。
translation.extractor
目的:注册从文件中提取消息的自定义服务
当执行翻译:更新
命令时,它使用提取器从文件中提取翻译消息。默认情况下,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名称空间Acme\DemoBundle\翻译;使用欧宝娱乐app下载地址\组件\翻译\器\ExtractorInterface;使用欧宝娱乐app下载地址\组件\翻译\MessageCatalogue;类FooExtractor实现了ExtractorInterface{受保护的$前缀;/** *从模板目录提取翻译消息到编目。* /公共函数提取($目录, MessageCatalogue$目录){/ /……}/** *设置应用于新发现消息的前缀。* /公共函数setPrefix($前缀){$这->前缀=$前缀;}}
- YAML
- XML
- PHP
1 2 3 4
服务:应用翻译\ \ CustomExtractor:标签:-{名称:translation.extractor,别名:喷火}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“应用程序翻译\ \ CustomExtractor”><标签的名字=“translation.extractor”别名=“foo”/>服务>服务>容器>
1 2 3 4
使用AppBundle\翻译\CustomExtractor;$容器->注册(CustomExtractor::类)->addTag (“translation.extractor”, (“别名”= >“foo”]);
translation.dumper
目的:注册将消息转储到文件的自定义服务
后译器从模板中提取所有消息后,将执行转储程序以将消息转储到特定格式的翻译文件中。
欧宝娱乐app下载地址Symfony已经提供了许多转储器:
- CsvFileDumper
- IcuResFileDumper
- IniFileDumper
- MoFileDumper
- PoFileDumper
- QtFileDumper
- XliffFileDumper
- YamlFileDumper
您可以通过扩展创建自己的转储器FileDumper或实现DumperInterface并将服务标记为translation.dumper
.标签有一个选项:别名
这是用来确定应该使用哪个转储器的名称。
- YAML
- XML
- PHP
1 2 3 4
服务:AppBundle \ \ JsonFileDumper翻译:标签:-{名称:translation.dumper,别名:json}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \ \ JsonFileDumper翻译”><标签的名字=“translation.dumper”别名=“json”/>服务>服务>容器>
1 2 3 4
使用AppBundle\翻译\JsonFileDumper;$容器->注册(JsonFileDumper::类)->addTag (“translation.dumper”, (“别名”= >json的]);
twig.extension
目的:注册自定义分支扩展
要启用Twig扩展,请将其作为常规服务添加到您的配置中,并使用twig.extension
.如果你在用默认的服务。yml配置,该服务是自动注册和自动标记的。但是,你也可以手动注册:
- YAML
- XML
- PHP
1 2 3
服务:AppBundle \树枝\ AppExtension:标签:(twig.extension)
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \树枝\ AppExtension”><标签的名字=“twig.extension”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\嫩枝\AppExtension;$容器->注册(AppExtension::类)->addTag (“twig.extension”);
有关如何创建实际的树枝扩展类的信息,请参见树枝的文档欧宝体育电话关于这个话题或阅读如何编写一个自定义树枝扩展篇文章。
twig.loader
目的:注册一个加载Twig模板的自定义服务
默认情况下,Symfon欧宝娱乐app下载地址y只使用一个树枝装载机-FilesystemLoader.如果您需要从其他资源加载Twig模板,您可以为新的加载器创建一个服务并标记它twig.loader
.
如果你使用默认的服务。yml配置,由于自动配置,该服务将被自动标记。但是,你也可以手动注册:
- YAML
- XML
- PHP
1 2 3 4
服务:AppBundle \树枝\ CustomLoader:标签:-{名称:twig.loader,优先级:0}
12 3 4 5 6 7 8 9 10 11 12
<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“AppBundle \树枝\ CustomLoader”><标签的名字=“twig.loader”优先级=“0”/>服务>服务>容器>
1 2 3 4 5 6
使用AppBundle\嫩枝\CustomLoader;$容器->注册(CustomLoader::类)->addTag (“twig.loader”, (“优先”= >0]);
请注意
的优先级
是可选的,其值为正整数或负整数,默认为0
.先试数较大的装载机。
validator.initializer
目的:注册一个在验证前初始化对象的服务
这个标记提供了一个非常不寻常的功能,允许您在对象验证之前对其执行某种操作。例如,Doctrine使用它在验证对象之前查询对象上的所有惰性加载数据。如果没有这一点,在验证时Doctrine实体上的一些数据就会显得“缺失”,尽管实际情况并非如此。
如果确实需要使用此标记,只需创建一个新类来实现ObjectInitializerInterface接口。然后,标记它与validator.initializer
标签(它没有选项)。
有关示例,请参见DoctrineInitializer
在教义桥里面上课。