0

フォームのバリデーターを一時的に無効にする最良の方法は何でしょうか。以下を検討してください

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を使用せずに機能させたいと考えています。

4

1 に答える 1

0

メソッドで送信されたデータに基づいて、検証グループを動的に設定できますsetDefaultOptionsここを参照してください。

于 2012-10-25T06:46:44.927 に答える