使用依赖注入的类内参数

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.1,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

使用依赖注入的类内参数

您已经看到了如何使用配置参数欧宝娱乐app下载地址Symfony服务容器。有特殊情况,比如当你想要的,例如,使用% kernel.debug %参数,使服务在你的包进入调试模式。对于这种情况有更多的工作要做,以使系统理解参数值。默认情况下,你的参数% kernel.debug %将被视为一个简单的字符串。考虑下面的例子:

1 2 3 4 5 6 7 8 9 10 11
/ /内部配置类美元rootNode- >孩子()- >booleanNode (“日志”)- >defaultValue (“% kernel.debug %”)- >结束()/ /……- >结束();/ /内部扩展类美元配置=美元- >processConfiguration (美元配置,美元配置);var_dump (美元配置(“日志”]);

现在,看到这密切检查结果:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
my_bundle:日志:真正的#真的,如预期my_bundle:日志:“% kernel.debug %”#真/假AppKernel(取决于第二参数),#如预期,因为% kernel.debug %内部配置#被传递到扩展之前得到评估my_bundle:~#将字符串“% kernel.debug %”。#这是总是认为是真实的。#配置器并不了解# % kernel.debug %”作为一个参数。

为了支持这一用例,配置类必须注射通过扩展这个参数如下:

1 2 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 30
名称空间AppBundle\DependencyInjection;使用欧宝娱乐app下载地址\组件\配置\定义\构建器\TreeBuilder;使用欧宝娱乐app下载地址\组件\配置\定义\ConfigurationInterface;配置实现了ConfigurationInterface{私人美元调试;公共函数__construct(美元调试){美元- >debug =(保龄球)美元调试;}公共函数getConfigTreeBuilder(){美元treeBuilder=TreeBuilder ();美元rootNode=美元treeBuilder- >根(“my_bundle”);美元rootNode- >孩子()/ /……- >booleanNode (“日志”)- >defaultValue (美元- >调试)- >结束()/ /……- >结束();返回美元treeBuilder;}}

的构造函数中配置通过扩展类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
名称空间AppBundle\DependencyInjection;使用欧宝娱乐app下载地址\组件\DependencyInjection\ContainerBuilder;使用欧宝娱乐app下载地址\组件\HttpKernel\DependencyInjection\扩展;AppExtension扩展扩展{/ /……公共函数getConfiguration(数组美元配置,ContainerBuilder美元容器){返回配置(美元容器- >getParameter (“kernel.debug”));}}

有一些实例% kernel.debug %使用在一个配置器类在TwigBundle和AsseticBundle。然而这是因为默认参数值设定的扩展类。例如在AsseticBundle,你可以找到:

1
美元容器- >setParameter (“assetic.debug”,美元配置(“调试”]);

的字符串% kernel.debug %在这里作为一个参数传递处理解释工作容器反过来做评估。两种方法实现类似的目标。AsseticBundle不会使用% kernel.debug %而是新% assetic.debug %参数。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。