使用Symfony Form添加伪元素

时间:2013-07-24 11:05:51

标签: php symfony

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

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

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

怎么做?感谢。

1 个答案:

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

}