我试图将一些额外的参数传递给我的FormEvent Listener,它通常只需要一个参数,即实际的事件本身。我尝试过这样的事情:
$builder->addEventListener(FormEvents::PRE_SET_DATA,
function($event, $extraData) {
//Do stuff
}
);
然而,这会返回一个错误,指出它缺少此函数的第二个参数。我对任何建议持开放态度!谢谢!
答案 0 :(得分:6)
事件侦听器闭包只传递了事件,因此$extraData
永远不会通过侦听器传递给它。
如果你想使用闭包内表单中其他地方的数据,那么你需要使用use
这样在闭包中传递它。
$extraData = array('some' => 'stuff');
$builder->addEventListener(FormEvents::PRE_SET_DATA,
function($event) use ($extraData) {
//Do stuff
}
);
修改强>
抱歉,我昨晚复制并粘贴了您的关闭内容,其中包含function($event, $extraData)
,然后我忘记将其删除。 use
语句就是所需要的。作为参数的$extraData
将不会被事件设置,因此(可能)将显示为null,甚至可能覆盖通过use
传入的那个。
来自this answer(释义)" $extraData
中的信息在定义函数时绑定,并且在调用函数时绑定参数"会让我相信可能会发生覆盖。