【问题标题】:Adding Parameters to FormEvent Listeners in Symfony2向 Symfony2 中的 FormEvent 监听器添加参数
【发布时间】:2014-08-17 20:02:21
【问题描述】:

我正在尝试将一些额外的参数传递给我的 FormEvent 侦听器,它通常只接受一个参数,即实际事件本身。我尝试做类似的事情:

$builder->addEventListener(FormEvents::PRE_SET_DATA,
    function($event, $extraData) {
        //Do stuff
    }
);

但是,这会返回一个错误,指出它缺少此函数的第二个参数。我愿意接受任何建议!谢谢!

【问题讨论】:

    标签: forms symfony events event-listener


    【解决方案1】:

    事件侦听器闭包仅将事件传递给它,因此您的 $extraData 永远不会通过侦听器传递给它。

    如果你想在闭包内使用表单中其他地方的数据,那么你需要像这样使用use 在闭包中传递它..

    $extraData = array('some' => 'stuff');
    
    $builder->addEventListener(FormEvents::PRE_SET_DATA,
        function($event) use ($extraData) {
            //Do stuff
        }
    );
    

    编辑

    抱歉,我昨晚复制并粘贴了您的关闭,其中包括 function($event, $extraData),然后我忘记将其删除。只需 use 语句即可。作为参数的$extraData 不会由事件设置,因此(可能)会显示为空,甚至可能会覆盖通过use 传入的参数。

    从this answer 中的信息(释义)“$extraData 在定义函数时绑定,在调用函数时绑定参数”会让我相信可能会发生覆盖。

    【讨论】:

    • 以前完全看过这个,但感谢你记忆中的好;)作为一个后续问题,你真的需要在闭包中添加额外的参数吗?还是use ($extraData) 足够了? (即将测试,但如果你知道的话可以加分)
    • 这不是必需的,甚至不是相同的变量。我相当确定第一个 $extraData 为 null 或至少不是您期望的数组。将第一个重命名为 $foo 并 var_dump 在闭包内查看。
    • “第一个”是指函数定义中的那个?我认为如果你把额外的参数留在那里,你只会得到一个错误,因为当调用闭包时,它没有传递第二个参数,所以它会混淆。
    • 可能也是这样。 Qoop 的更新答案是正确的。
    • 干杯。尝试,再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多