我有一个带有集合子表单的表单。在子表单中,属性" resourceId"有一个choiceType字段。它的数据由ajax填充,带有Select2 js插件(因为它的数据取决于另一种选择,您可以在其中选择资源类型)。
在我已经选择了resourceId值的特定情况下,我无法验证我的字段:
transformationFailure: TransformationFailedException {#4328 ▼
#message: "Unable to reverse value for property path "resourceId": The choice "bd922d35fb828da6e39edf3c7927511c9a6be025" does not exist or is not unique"
这是因为我必须通过javascript添加字段的默认值(感谢Select2)。
我需要取消对该字段的验证,但即使我在BuildForm方法中使用ResetViewTransformers()并重建PreSubmit事件中的字段,它仍然无法验证。
TL; DR:如何在PreSubmit事件期间取消验证? (如果可能,只在我的领域)
答案 0 :(得分:0)
找到解决方案。我的方向错了。
我所要做的就是重写ChoiceType类并禁用ViewTransformers,然后使用新类:
class NonTransformedChoiceType extends ChoiceType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->resetModelTransformers();
$builder->resetViewTransformers();
}
}
答案 1 :(得分:-2)
添加一些jquery并将.ignore
类添加到您的特定表单字段中。如果您加载整个表单我建议单独加载它们,以便您可以轻松添加它。
$("#myform").validate({
ignore: ".ignore, :hidden"
})
隐藏也会确保您隐藏的任何字段,由于其他原因不会受到影响,然后会出错,参考:here