我有一个带有文本字段的实体(让它成为用户)(让它成为“头像”)。
现在我想创建用于编辑用户实体的Symfony表单类型,但我不想将“avatar”字段编辑为文本。相反,我想要一个复选框“”。
如果用户选中“清除字段头像”,则文本提交“头像”将被清除。
怎么做?感谢。
答案 0 :(得分:0)
只需在表单中添加clear_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();
}
}
}