Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation Symfony3+;Select2 AJAX-禁用选项验证_Validation_Symfony Forms_Symfony_Select2 - Fatal编程技术网

Validation Symfony3+;Select2 AJAX-禁用选项验证

Validation Symfony3+;Select2 AJAX-禁用选项验证,validation,symfony-forms,symfony,select2,Validation,Symfony Forms,Symfony,Select2,我有一个Symfony3表单,它有一个ChoiceType字段。它使用Select2和AJAX数据源。这个钻头很好用。但是,在提交表格时,Symfony验证会启动并投诉: This value is not valid 我想这是因为通过AJAX选择的选项不存在于表单类型的“choices”键中 我对Symfony比较陌生。有人能给我指出正确的方向来禁用字段上的验证吗?您不应该禁用验证。使用表单事件动态添加选项 您还可以查看此捆绑包:您必须始终使用字符串值向选项类型提交数据 考虑以下选择类型

我有一个Symfony3表单,它有一个ChoiceType字段。它使用Select2和AJAX数据源。这个钻头很好用。但是,在提交表格时,Symfony验证会启动并投诉:

This value is not valid  
我想这是因为通过AJAX选择的选项不存在于表单类型的“choices”键中


我对Symfony比较陌生。有人能给我指出正确的方向来禁用字段上的验证吗?

您不应该禁用验证。使用
表单事件动态添加选项


您还可以查看此捆绑包:

您必须始终使用字符串值向
选项类型提交数据

考虑以下
选择类型
配置:

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

$builder->add('some_choice', ChoiceType::class, array(
    'choices' => array(
        'Choose 1' => 1,
        'Choose A' => 'A',
        'Choose True' => true,
    ),
));
默认情况下,您可能希望选项数组中的每个键都用作标签,每个选项值都转换为字符串并用作html值:

<option value="1">Choose 1</option>
<option value="A">Choose A</option>
<option value="1">Choose True</option>
当选择数组中的某些模型选择值不是标量(例如
数组
对象
…)时,也会发生同样的情况

那么提交的数据应该是
“0”
“1”
“2”
。通过
选择类型
,每个选项都将映射到相应的选项

要保持对每个选项使用的字符串值的完全控制,可以使用选项
choice\u value
作为闭包,该闭包将每个选项作为唯一参数传递,并且必须返回其字符串值

如果选择的是对象或数组,则可以将其设置为属性路径:

'choice_value' => 'property'

// will be equivalent to

'choice_value' => function ($choice) {
    if (is_array($choice)) {
        return $choice['property'];
    }

    if (is_object($choice)) {
        return $choice->getProperty();
        // or even $choice->isProperty()
    }

    throw new UnexpectedTypeException();
}
结论: 默认行为与以下相同:

$builder->add('some_choice', ChoiceType::class, array(
    'choices' => array(
        'Choose 1' => 1,
        'Choose A' => 'A',
        'Choose True' => true,
    ),
    'choice_value' => function ($choice) {
        if (!is_scalar($choice) {
            return null;
        }

        return false === $choice ? '0' : (string) $choice;
    },
));
如果返回了
null
或两个相同的值,则将使用递增整数

您必须始终提交字符串选择值,以便通过
选项类型
将其映射回

任何未知值或“额外”值都会导致错误


请参阅

,谢谢你们的回复。我结束了使用表单事件,因为它对我正在做的其他事情很有用。我用一种新的表单类型解决了这个问题:
$builder->add('some_choice', ChoiceType::class, array(
    'choices' => array(
        'Choose 1' => 1,
        'Choose A' => 'A',
        'Choose True' => true,
    ),
    'choice_value' => function ($choice) {
        if (!is_scalar($choice) {
            return null;
        }

        return false === $choice ? '0' : (string) $choice;
    },
));