在预提交事件

时间:2017-01-02 14:20:53

标签: forms symfony symfony-2.8

我有一个带有集合子表单的表单。在子表单中,属性" 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事件期间取消验证? (如果可能,只在我的领域)

2 个答案:

答案 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