我正在查看一个声明自定义规范化器的symfony项目。在构造函数中有一个可选参数,该参数将被忽略。
public function __construct(SomeInterface $firstArg, $secondArg = false)
{
//$secondArg is always false
}
有一些yml配置:
Path/To/Custom/Normalizer:
arguments:
$secondArg: true
tags: [serializer.normalizer]
我试图了解实例化此类的原因,尽管yml配置将其定义为true,但第二个参数为什么总是为false。
规范化器是使用yml配置实例化的,还是symfony是否使用其他机制实例化了这些规范化工具?
更多信息: 如果我将第二个构造函数设为arg强制,则容器将无法编译。抱怨它不能自动连接第二个参数,我必须显式配置它的值。这就是我想要做的。
答案 0 :(得分:0)
自动装配symfony不知道如何自动装配标量参数类型。
如果启用此服务的自动装配,则永远不会执行您的手动配置。因此,容器尝试创建服务的新实例,但他不知道如何实例化布尔参数。
您可以做的是从自动装配中排除此服务
在构造函数和服务配置本身上使用不同的默认值是一个不好的主意,并且很快就会变得非常头痛。
答案 1 :(得分:0)
在AppKernel.php中定义的捆绑包加载顺序对配置有所影响。
即使在任何其他捆绑包中似乎没有此类的其他配置。