Nic*_*ick 22 php symfony-forms symfony doctrine-orm
我正在尝试访问父CollectionType内部给定嵌入式表单的实体FormBuilder:
ParentType的
Class ParentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('children', CollectionType::class, array(
'entry_type' => ChildType::class
);
}
}
Run Code Online (Sandbox Code Playgroud)
ChildType
class ChildType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$child = $builder->getData(); // this returns null
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Vendor\Bundle\Entity\Child',
);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这是以正常形式工作,$child但返回为null.我怎样才能访问Child里面的实体ChildType?
use*_*727 41
答案在于利用事件监听器该监听PRE_SET_DATA事件.
它将为您的闭包传递一个FormEvent类,该类包含表单和绑定到它的数据.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($builder)
{
$form = $event->getForm();
$child = $event->getData();
if ($child instanceof Child) {
// Do what ever you like with $child entity data
}
}
);
}
Run Code Online (Sandbox Code Playgroud)