我需要对我拥有的任何表单都有一个通用的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已经解决了这个问题。但我没有发现他们是如何做到的。
答案 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!"]}}}"