Php 使用Symfony表单添加伪元素

Php 使用Symfony表单添加伪元素,php,symfony,Php,Symfony,我有一个实体(让它是用户)和文本字段(让它是“化身”) 现在我想创建用于编辑用户实体的Symfony表单类型,但我不想将“avatar”字段编辑为文本。相反,我想要一个复选框“” 如果用户选中“清除字段头像”,当文本字段“头像”将被清除 怎么做?谢谢。只需将clear\u avatar字段添加到您的表单中,而不要将其映射到您的实体 $builder->add('clear_avatar', 'checkbox', array('mapped' => false)); 然后,您可以获

我有一个实体(让它是用户)和文本字段(让它是“化身”)

现在我想创建用于编辑用户实体的Symfony表单类型,但我不想将“avatar”字段编辑为文本。相反,我想要一个复选框“”

如果用户选中“清除字段头像”,当文本字段“头像”将被清除


怎么做?谢谢。

只需将
clear\u avatar
字段添加到您的表单中,而不要将其映射到您的实体

$builder->add('clear_avatar', 'checkbox', array('mapped' => false));
然后,您可以获取其值并在数据绑定后重置化身

$form->bind($request);
if ($form->isValid()) {
    $user = $form->getData();
    if ($form->get('clear_avatar')->getData()) {
        $user->clearAvatar();
    }
    ...
}
或者,您可以在
FormEvents::POST_BIND
上添加侦听器,以便在不修改控制器的情况下执行相同的操作。比如:

$builder->addEventListener(FormEvents::POST_BIND, array($this, 'onPB'));
..
public function onPB (FormEvent $ev)
{
    $entity = $ev->getData();
    if ($ev->getForm()->get('clear_avatar')->getData()) {
        $entity->clearAvatar();
    }
}

}

我认为添加FormEvents::POST_BIND是最好的。请给我演示一下怎么做?