如何使用JMSSerializer将Symfony中的表单错误作为JSON对象获取

时间:2015-01-26 09:37:56

标签: json forms symfony symfony-forms jmsserializerbundle

我需要对我拥有的任何表单都有一个通用的JSON表示错误。

我已经阅读了how to return json encoded form errors in symfony中的其他解决方案。但我不想为任务创建一个服务,这个服务已经可以通过我连接到项目的其他包来解决。

我在项目中使用JMSSerializerBundle,我知道此捆绑包可以使用FormErrorHandler处理Symfony表单错误。但现在我只能获得整个表单序列化:

$errors = $form->getErrors();
$serializer = $this->get('jms_serializer');
$json = $serializer->serialize($errors, 'json');

此代码将返回下一个JSON-object:

{
    "form": {
        "children": {
            "field1": [],
            "field2": [],
            "field_with_error": {
                "errors": ["Error text"]
            },
            "collection": {
                "child_form": [
                    {
                        "children": {
                            "field1": [],
                            "field2": []
                        }
                    }
                ]
            }
        }
    },
    "errors": []
}

但是我需要这样的东西(只有有错误的字段):

{
    "field_with_error": {
        "errors": ["Error text"]
    }
}

我怎样才能实现这一目标?我看了FOSRestBundle已经解决了这个问题。但我没有发现他们是如何做到的。

1 个答案:

答案 0 :(得分:0)

使用以下代码,您可以获得所需的相同结构的错误:

$handler = new FormErrorHandler($this->get('translator'));
$visitor = new JsonSerializationVisitor(new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()));
$errors = json_encode($handler->serializeFormToJson($visitor, $editForm, array()));

<强>结果

"{"children":{"title":{"errors":["This value should not be blank."]},"summary":{"errors":["Give your post a summary!"]},"content":{"errors":["Your post should have some content!"]}}}"