0

テキストフィールド(「アバター」とする)を持つエンティティ(ユーザーとする)があります。

ユーザーエンティティを編集するためのSymfonyフォームタイプを作成したいのですが、「アバター」フィールドをテキストとして編集したくありません。代わりに、チェックボックス「」が必要です。

ユーザーが「Clear field avatar」をオンにすると、テキスト フィールドの「avatar」がクリアされます。

どうやってするの?ありがとう。

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 に答える