2017-01-18 111 views
0

我需要驗證輸入字段,具體取決於我傳遞給buildForm()的選項 而我有這樣的代碼,我粘在一起從谷歌搜索。 然而,在控制器如何動態驗證symfony 2.3中的表單字段

$form->isValid()

通過與屬於範圍外的值:

$builder->add('limit', 'integer', array(
    'constraints' => [ 
     new Assert\Range(array(
      'min' => $options['min'], 
      'max' => $options['max'], 
      'minMessage' => 'min error message', 
      'maxMessage' => 'max error message', 
     )) 
    ], 
)); 

如何動態地驗證輸入?

UPDATE

Symfony2 validation using Assert annotation does not work同樣的問題。將不得不編寫一個自定義驗證器。

+0

動態定義,你的意思是最小/根據表單內容的最大更改或最小/最大值可以根據用於生成表單的數據更改? – Rooneyl

+0

取決於用於構建表格的數據 – Martin

回答

0

你可以做一些基本的東西是這樣的:

if ($option['condition'] === 'whatever') { 
    $limtiConstraint = new Assert\Range(array(
     'min'  => $options['min'], 
     'max'  => $options['max'], 
     'minMessage' => 'min error message', 
     'maxMessage' => 'max error message', 
    )); 
} else { 
    // $limtiConstraint = 'other constraint with other options' 
} 

$builder->add('limit', 'integer', array(
    'constraints' => [$limtiConstraint] 
)); 

或者,如果你要修改的限制,您可以使用三元運算:

'min' => $options['condition'] ? $options['min'] : $options['other_min'], 
+0

這種結構沒有錯誤嗎?真的嗎? $ options ['condition']? $ options ['min']:$ options ['other_min']' – zalex

+0

很高興您注意到錯誤。 :) – COil