清理在事件侦听器中访问表单选项的方法

时间:2016-03-08 09:00:45

标签: forms symfony

如何以干净的方式从事件侦听器访问传递给buildForm()的$选项?请参阅下面的代码示例:

> newfile

4 个答案:

答案 0 :(得分:13)

$event->getForm()->getConfig()->getOptions()

答案 1 :(得分:2)

让他们选择一个而不是整个阵列通常很方便:

$event->getForm()->getConfig()->getOption('option_key')

但是,如果您需要完整的阵列,请遵循Artur的建议:

$event->getForm()->getConfig()->getOptions()

答案 2 :(得分:1)

不要依赖$event->getForm()->getConfig()->getOptions()。这并不意味着我们会使用它。我为此问题在Symfony错误跟踪器上打开了一个issue,他们告诉我改为将变量继承到匿名函数中。 See this example

请注意use关键字。

->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) {
    // here you can use $options
}

这将从父作用域获得$options数组,并将其注入事件监听器函数。这是一个PHP功能。

哦,这意味着您必须直接将匿名函数作为参数传递给addEventListener()(如上例所示),或者在buildForm()内将其定义为普通变量,例如这个:

$listener = function (FormEvent $event) use ($options) {
    // do something
}

$builder
    ->addEventListener(FormEvents::PRE_SET_DATA, $listener);

答案 3 :(得分:-1)

您可以声明一个类变量并将选项变量复制到该变量并访问函数中的该类变量。