如何以干净的方式从事件侦听器访问传递给buildForm()的$选项?请看下面的代码示例:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'preSetDataListener']);
}
public function preSetDataListener(FormEvent $event)
{
// how would I access $options from buildFrom here?
}
Run Code Online (Sandbox Code Playgroud)
不要依赖$event->getForm()->getConfig()->getOptions()。它不适合我们使用。我已经在 Symfony 错误跟踪器上针对这个问题打开了一个问题,他们告诉我将变量继承到匿名函数中。请参阅此示例。
注意关键词use。
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) {
// here you can use $options
}
Run Code Online (Sandbox Code Playgroud)
$options它从父作用域获取数组并将其注入到事件侦听器函数中。这是 PHP 的一项功能。
哦,这意味着您必须直接将匿名函数作为参数传递给addEventListener()(如上面的示例),或者将其定义buildForm()为普通变量,如下所示:
$listener = function (FormEvent $event) use ($options) {
// do something
}
$builder
->addEventListener(FormEvents::PRE_SET_DATA, $listener);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1613 次 |
| 最近记录: |