Forms 根据数组Symfony2验证选择字段
我正在Symfony2建立一个表单类。在我的班上,我有一个选择领域。我构建了一个函数来返回我的选择数组:Forms 根据数组Symfony2验证选择字段,forms,symfony,validation,Forms,Symfony,Validation,我正在Symfony2建立一个表单类。在我的班上,我有一个选择领域。我构建了一个函数来返回我的选择数组: public function getCardTypes() { return array('visa' => 'Visa', 'mc' => 'MasterCard', 'amex' => 'American Express'); } 稍后,我将使用此数组向表单中添加一个选项字段: $builder->add('PaymentCCType', 'choi
public function getCardTypes() {
return array('visa' => 'Visa', 'mc' => 'MasterCard', 'amex' => 'American Express');
}
稍后,我将使用此数组向表单中添加一个选项字段:
$builder->add('PaymentCCType', 'choice', array('choices' => $this->getCardTypes()));
然后在getDefaultOptions函数中,我对该字段有一个选择约束:
'PaymentCCType' => new Choice(array('choices' => $this->getCardTypes())),
我似乎对这个验证器有问题。当我提交此表单时,我的选择框下面出现以下错误:“您选择的值不是有效的选择”。当然,我正在使用数组中的一个选项
我做错了什么
/*编辑*/
我注意到,在这4个字段中,我只得到其中3个字段的错误。选择月份(简单的1-12)时,验证有效
/*编辑2*/
当数组键与值不匹配时,似乎会出现此问题。我将阵列切换到阵列(“Visa”=>“Visa”、“万事达卡”=>“万事达卡”、“美国运通”=>“美国运通”)
现在它可以工作了。
这有什么办法吗?我觉得我不可能是唯一一个有这个问题的人。即使您有一个常规(非关联)数组,如
array('Visa','MasterCard','American Express')
也会发生这种情况。如果您应该以不同的方式执行此操作,请使用以下方法创建具有ChoiceListInterface的类:
public function getChoices()
{
return self::$choices;
}
public static function getTypeChoicesKeys()
{
return array_keys(self::$choices);
}
形式类:
$builder->add('type', 'choice',
array(
'expanded' => true,
'multiple' => false,
'choice_list' => new TypeChoices(),
'required' => true,
)
)
在validation.yml中
type:
- NotNull: ~
- Choice: { callback: [TypeChoices, getTypeChoicesKeys] }
编辑
在回答我的问题时,Symfony团队指出,选择验证程序接受一组可能的值(而不是像选择字段这样的可能选择)。最简单的方法是使用array_keys函数:
'PaymentCCType'=>新选项(数组('choices'=>数组_键($this->getCardTypes()),
我认为您不必在getDefaultOptions方法中添加此选项。用$builder->add(…)
代码试试你的表单。@AdrienBrault我在这里遵循这个指南:我觉得这有点可笑。我必须在一个新文件夹中创建一个单独的类文件,以创建/验证一个带有3个选项的select?我第一次感觉也是这样。现在我不在乎了。这对一些事情来说是有意义的(特别是像country这样的大型选择集),但在这里我真的试图将表单全部保存在一个地方。如果你要本地化等。使用单独类的应用程序很有意义这正是我所需要的。非常感谢您的帖子:)