symfony规范化器如何实例化?

时间:2019-12-11 20:23:37

标签: symfony

我正在查看一个声明自定义规范化器的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强制,则容器将无法编译。抱怨它不能自动连接第二个参数,我必须显式配置它的值。这就是我想要做的。

2 个答案:

答案 0 :(得分:0)

自动装配symfony不知道如何自动装配标量参数类型。

如果启用此服务的自动装配,则永远不会执行您的手动配置。因此,容器尝试创建服务的新实例,但他不知道如何实例化布尔参数。

您可以做的是从自动装配中排除此服务

在构造函数和服务配置本身上使用不同的默认值是一个不好的主意,并且很快就会变得非常头痛。

答案 1 :(得分:0)

在AppKernel.php中定义的捆绑包加载顺序对配置有所影响。

即使在任何其他捆绑包中似乎没有此类的其他配置。