2011-12-22 14 views
3

追加のフォームクラスを使用しようとしています&編集。追加モードでは、iconFileが必要です。編集モードでは、iconFileはオプションです(現在のアイコンを置き換えるため)。どのように私はこれを達成することができますか?Symfony 2フォーム検証グループ

私は

class ItemForm extends AbstractType { 
    public function __construct($mode) { 
     $this->mode = $mode; 
    } 

    public function getDefaultOptions(array $opts) { 
     if ($mode == 'add') { 
      return array('validation_groups' => array('Default', 'add')); 
     } else { 
      return array('validation_groups' => array('Default')); 
     } 
    } 
} 

// doctrine entity, data_class of form 
class Item { 
    /** 
    * @Assert\NotBlank(groups={"add"}) 
    * @Assert\Image 
    */ 
    protected $iconFile; 
} 

// creating the form in controller 
$form = $this->createForm(new ItemForm($mode)); 

問題も編集モードであるコンストラクタでモードを設定しようとした、私はまだ画像を選択する必要があります。 HTML5の検証では、$this->modeから$modeを設定しているが、あなたはその後、getDefaultOptions()から$modeにアクセスしようとしている、あなたのItemFormコンストラクタで

答えて

4

をトリガします。 $modeは明らかに、この範囲内に存在しない - 以下に変更してみてください:

public function getDefaultOptions(array $opts) { 
    if ($this->mode == 'add') { 
     return array('validation_groups' => array('Default', 'add')); 
    } else { 
     return array('validation_groups' => array('Default')); 
    } 
} 
0

あなたが行うことができます。

public function setDefaultOptions(OptionsResolver\OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'LIG\Bundle\UserBundle\Entity\User', 
     'validation_groups' => function(Form\FormInterface $form) { 
      $data= $form->getData(); 
      if($data->getId()) 
      { 
       return array('Default', 'Edit'); 
      } 
      else 
      { 
       return array('Default', 'Add'); 
      } 
     }, 
    )); 
} 
関連する問題