「利用規約を読み、同意します」チェックボックスが付いたフォームがあります。フォームが有効であると見なされるには、チェックボックスをオンにする必要がありますが、もちろん、その値をデータベースに保存する理由はなく、エンティティに属性を追加する理由もありません。
ボックスがチェックされていない限りフォームが有効であると見なされないように、Symfony2でこの種の機能を実装するための良い方法は何ですか?
「利用規約を読み、同意します」チェックボックスが付いたフォームがあります。フォームが有効であると見なされるには、チェックボックスをオンにする必要がありますが、もちろん、その値をデータベースに保存する理由はなく、エンティティに属性を追加する理由もありません。
ボックスがチェックされていない限りフォームが有効であると見なされないように、Symfony2でこの種の機能を実装するための良い方法は何ですか?
この質問はかなり古く、Symfonyはこれをたくさん更新しました。Symfony 3.xの場合、次のようなことができます。
$builder->add('terms', CheckboxType::class, [
'mapped' => false,
'constraints' => new IsTrue(),
]);
フォームをオブジェクトにマッピングすると、すべてのフィールドがマッピングされます。マップされたオブジェクトに存在しないフォーム上のフィールドがあると、例外がスローされます。基になるオブジェクトにマップされないフォームに追加のフィールドが必要な場合(たとえば、「これらの条件に同意しますか」チェックボックス)、property_pathオプションをfalseに設定する必要があります。
use Symfony\Component\Form\FormBuilderInterface;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('task');
$builder->add('dueDate', null, array('property_path' => false));
}
フィールドデータには、コントローラーで次の方法でアクセスできます。
$form->get('dueDate')->getData();