フォームのバリデーターを一時的に無効にする最良の方法は何でしょうか。以下を検討してください
MyController.php
$builder = $this->createFormBuilder()
->add('parentfield1')
->add('parentfield2')
->add('children', 'collection', array('type' => new ChildType(), 'allow_add' => true));
$form = $builder->getForm();
if ($request->request->get('addb')) {
$formReq = $request->request->get('form');
$formReq['children'][] = array(
'child_id' => '1',
'childfield1' => '',
'childfield2' => ''
);
$request->request->set('form', $formReq);
// I would like to disable validators here somehow
$form->bindRequest($request);
} elseif ($request->request->get('sendb')) {
$form->bindRequest($request);
// persist form to database
}
したがって、私のフォームには2つの異なるボタンがあります。sendb-フォームを投稿し、検証し、データベースaddbに保持します-フォームを投稿し、バリデーターを呼び出さずに子アイテムを追加するための新しいフィールドを追加します
現在、検証グループでこれを行うことができます。
$validationGroups = array();
if($request->request->get('addb')) {
// I just use group not defined in entity for any validators
$validationGroups[] = 'novalidation';
}
$builder = createFormBuilder(new ParentEntity(), array('validation_groups' => $validationGroups));
これは機能しますが、symfony2ではバリデーターをフォームビルダーコンストラクターに渡すことしかできず、request-> get('addb')を2回チェックする必要があるため、これはコードの重複も意味します。
子フォームフィールドの追加もjavascript(コレクションプロトタイプオプション)を使用して実行できることは知っていますが、javascriptを使用せずに機能させたいと考えています。