テキストフィールド(「アバター」とする)を持つエンティティ(ユーザーとする)があります。
ユーザーエンティティを編集するためのSymfonyフォームタイプを作成したいのですが、「アバター」フィールドをテキストとして編集したくありません。代わりに、チェックボックス「」が必要です。
ユーザーが「Clear field avatar」をオンにすると、テキスト フィールドの「avatar」がクリアされます。
どうやってするの?ありがとう。
フォームにフィールドを追加するだけ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();
}
}
}