2017-01-18 67 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