0

我有一个带有文本字段的实体(让它成为用户)(让它成为“头像”)。

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

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

怎么做?谢谢。

4

1 回答 1

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();
    }
}

}
于 2013-07-24T11:33:12.270 回答