2016-07-18 4 views
0

値フィールドに応じて、私は私のフィールドにカスタムフィールドの検証を追加しようとしているが、私はそれを動作させることができない... ここでは私のコードです:addError

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 

    $builder 
      ->add('somefields', ChoiceType::Class, array(
       '...' 
      )) 
      ->add('tel', TextType::class, array(
       'label' => "Téléphone :", 
       'required' => false 
      )) 
      ->add('cell', TextType::class, array(
       'label' => "Port. :", 
       'required' => false 
      )) 
    ; 

    $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options) { 
     $data = $event->getData(); 
     $form = $event->getForm(); 

     if (empty($data['tel']) && empty($data['cell'])) { 
      $form->get('tel')->addError(new FormError('error message')); 
     } 
    }); 
} 

何I必要があります: 両方のフィールドが空白の場合は、少なくとも1つのフィールドを埋める必要があることを警告してください... 私は数日間別のものを試していますが、解決策が見つかりません。答えは簡単だと思います...

ありがとうございました。それは意志かどうかという特定の、それが動作するかどうかを参照してください

if (($form->get('tel')->getData() == '') && ($form->get('cell')->getData() == '')) { 
    $form->get('tel')->addError(new FormError('error message')); 
} 

ない:

答えて

0

まあ、私は別の方法でそれをすることができました。 私のエンティティにコールバックを追加しました

/** 
* @Assert\Callback 
*/ 
public function validate(ExecutionContextInterface $context, $payload) { 
    if (empty($this->getTel()) && empty($this->getCell())) { 
     $context->buildViolation('validation message') 
       ->atPath('tel') 
       ->addViolation(); 
     $context->buildViolation('validation message') 
       ->atPath('cell') 
       ->addViolation(); 
    } 
} 
0

は、あなたがこのような何かを試してみました。

+0

あなたの答えはありがとう、違いはありませんが、フォームはまだ有効です。 – ThEBiShOp

+0

ああ、私は問題を見る。 'tel'と 'cell'の両方が '' required '=> false'に設定されています。 「電話」を追加して「タイプ」を「自宅/ビジネス/セル」に設定し、それを必要とするようにデザインを変更できるかどうかは疑問です。それはよりよい解決策かもしれません。これは単なる提案です。 –

関連する問題