【发布时间】:2015-11-18 20:36:56
【问题描述】:
我需要使用事件侦听器,因为我需要在表单中显示不同的内容,无论它是新实体还是现有实体。我可以做到。
我需要一个数据转换器,将实体显示为文本,我也可以这样做。
=> 但是,我无法同时执行 2(数据转换器+事件侦听器)。我得到错误: “错误:在非对象上调用成员函数 add()”。如果我替换 $builder par $form,我会收到以下错误:尝试调用类“Symfony\Component\Form\Form”的名为“create”的未定义方法。
有效:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event){
$element = $event->getData();
$form = $event->getForm();
if (!$element || null === $element->getId()) { //new entity
$form->add(...);
} else { //exist already
//...
}
这也有效:
$builder->add( $builder->create('element', 'text')->addModelTransformer($transformer));
但我不能让两者同时工作。
$transformer = new ElementObjToStringTransformer($this->em);
$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event){
$element = $event->getData();
$form = $event->getForm();
if (!$element || null === $element->getId()) { //new entity
$builder->add( $builder->create('element', 'text')->addModelTransformer($transformer));
} else { //exist already
//...
}
});
【问题讨论】:
-
你可以将数据转换器定义为服务并注入到Listener中,但是这样使用它看起来很奇怪。我认为,这是个坏主意。