Symfony欧宝娱乐app下载地址 5.1新增功能:抽象服务参数
2020年4月23日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。欧宝娱乐app下载地址有些信息可能已经过时了。阅读最新的Symfony文档欧宝娱乐app下载地址.
提供的
伊斯兰教Israfilov
在# 35076.
有时,在Symfony应用程序中定义服务时,有些参数不能添加到配置文件中。欧宝娱乐app下载地址原因是它们的值只能在运行时计算编译器通过或包的扩展.
在这些情况下,通常会添加一个空参数和一些注释,解释稍后将注入该值。例如,该服务的第二个参数是存储Twig模板的完整目录列表。该列表仅在运行应用程序时可用,因为bundle也可以添加自己的目录:
1 2 3 4 5
<服务id=“twig.template_iterator”类=“欧宝娱乐app下载地址Symfony \包\ TwigBundle \ TemplateIterator”><论点类型=“服务”id=“内核”/><论点类型=“收集”/><!——树枝路径——><论点>% twig.default_path %论点>服务>
另一个服务需要应用程序的根名称空间,最好在运行应用程序时动态计算(而不是强制用户手动配置这个值):
1 2 3 4
<服务id=“maker.generator”类=“欧宝娱乐app下载地址Symfony \包\ MakerBundle \发生器”><论点类型=“服务”id=“maker.file_manager”/><论点/><!——根命名空间——>服务>
在Sy欧宝娱乐app下载地址mfony 5.1中,我们改进了这个配置以取代“空参数+注释”通过适当的抽象服务参数.这些参数的值只能在运行时在编译器传递或包扩展中计算。
这是前面的例子使用抽象参数时的样子:
1 2 3 4
<服务id=“maker.generator”类=“欧宝娱乐app下载地址Symfony \包\ MakerBundle \发生器”><论点类型=“服务”id=“maker.file_manager”/><论点类型=“抽象”关键=“rootNamespace美元”>在MakerPass中定义论点>服务>
的关键
Value定义服务构造函数中的参数名称和包含的值<参数>…> < /参数
是关于实参的可选注释。如果使用YAML定义服务,则使用基于YAML的其他语法抽象!
关键字:
1 2 3 4
maker.generator:类:欧宝娱乐app下载地址Symfony \包\ MakerBundle \生成器参数:$ rootNamespace:抽象!定义在MakerPass
这是使用PHP时需要的配置:
1 2 3 4 5
使用欧宝娱乐app下载地址\包\MakerBundle\发电机;使用欧宝娱乐app下载地址\组件\DependencyInjection\论点\AbstractArgument;美元构建器->注册(“maker.generator”、发电机::类)->setArgument (“rootNamespace美元”,新AbstractArgument (在MakerPass中定义));
如果你没有在编译器传递或包扩展中替换抽象参数的值,你会看到以下错误消息:
服务maker的参数“$rootNamespace”。generator"是抽象的(在MakerPass中定义),你忘记定义它了吗?
发表在#生活在边缘
评论
Sidi LEKHALIFA
2020年4月23日说在15:52
太棒了!
这是否与未命名的服务参数正确组合?以生成器为例,如何静态地传递maker.file_manager?
maker.generator:
类:Symfo欧宝娱乐app下载地址ny \包\ MakerBundle \生成器
参数:
——“@maker.file_manager”
在MakerPass中定义的$rootNamespace:
或
maker.generator:
类:Symfo欧宝娱乐app下载地址ny \包\ MakerBundle \生成器
参数:
文件管理:美元“@maker.file_manager”
在MakerPass中定义的$rootNamespace:
maker.generator:
类:Symfo欧宝娱乐app下载地址ny \包\ MakerBundle \生成器
参数:
——“@maker.file_manager”
在MakerPass中定义的$rootNamespace:
或
maker.generator:
类:Symfo欧宝娱乐app下载地址ny \包\ MakerBundle \生成器
参数:
文件管理:美元“@maker.file_manager”
在MakerPass中定义的$rootNamespace:
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
是否可以将它与PHP服务定义一起使用?
Ryan Weaver is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now是的!在幕后,它通过一个新的AbstractArgumentClass工作:
构建器- >注册(“foo”,FooWithAbstractArgument::类)
->addArgument(new AbstractArgument('foo', '$baz', '应该由Pass定义'));
干杯!