如何在Symfony中返回JSON编码的表单错误

西蒙·奎斯特

我想创建一个向其提交表单的Web服务,并在出现错误的情况下返回一个JSON编码列表,告诉我哪个字段错误。

目前,我仅收到错误消息列表,但没有html ID或出现错误的字段名称

这是我当前的代码

public function saveAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();

    $form = $this->createForm(new TaskType(), new Task());

    $form->handleRequest($request);

    $task = $form->getData();

    if ($form->isValid()) {

        $em->persist($task);
        $em->flush();

        $array = array( 'status' => 201, 'msg' => 'Task Created'); 

    } else {

        $errors = $form->getErrors(true, true);

        $errorCollection = array();
        foreach($errors as $error){
               $errorCollection[] = $error->getMessage();
        }

        $array = array( 'status' => 400, 'errorMsg' => 'Bad Request', 'errorReport' => $errorCollection); // data to return via JSON
    }

    $response = new Response( json_encode( $array ) );
    $response->headers->set( 'Content-Type', 'application/json' );

    return $response;
}

这会给我一个像

{
"status":400,
"errorMsg":"Bad Request",
"errorReport":{
        "Task cannot be blank",
        "Task date needs to be within the month"
    }
}

但是我真正想要的是

{
"status":400,
"errorMsg":"Bad Request",
"errorReport":{
        "taskfield" : "Task cannot be blank",
        "taskdatefield" : "Task date needs to be within the month"
    }
}

我该如何实现?

西蒙·奎斯特

我终于在这里找到了解决该问题的方法,它只需要进行一些小改动就可以适应最新的symfony更改,并且它的工作原理很吸引人:

解决方法是替换第33行

if (count($child->getIterator()) > 0) {

if (count($child->getIterator()) > 0 && ($child instanceof \Symfony\Component\Form\Form)) {

因为,随着在Form \ Button的symfony中的介绍,序列化函数中会出现类型不匹配的情况,该函数期望总是Form \ Form的实例。

您可以将其注册为服务:

services:
form_serializer:
    class:        Wooshii\SiteBundle\FormErrorsSerializer

然后使用它作为作者的建议:

$errors = $this->get('form_serializer')->serializeFormErrors($form, true, true);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Symfony 5中编码密码?

来自分类Dev

如何在laravel中编码返回的响应

来自分类Dev

如何在Symfony中多次嵌入表单

来自分类Dev

如何在Symfony中多次嵌入表单

来自分类Dev

如何在Symfony2中的部分登录表单中捕获身份验证错误

来自分类Dev

如何在Clojure Liberator中以json格式返回401错误?

来自分类Dev

如何在Laravel中处理JSON返回的验证器错误

来自分类Dev

如何在ModelFormMixin中返回空表单

来自分类Dev

如何在Doctrine中编码JSON数组?

来自分类Dev

如何在表单中显示错误消息

来自分类Dev

如何在表单中显示错误消息

来自分类Dev

如何在表单中显示错误消息

来自分类Dev

如何在Symfony中为任意实体的密码编码?

来自分类Dev

如何在简单的管理表单中获取表单错误

来自分类Dev

在Laravel中返回带有表单错误的JSON响应

来自分类Dev

如何在symfony2中提交表单ajax?

来自分类Dev

如何在symfony中删除嵌入的表单(集合字段)标签

来自分类Dev

如何在Symfony2中设置表单名称?

来自分类Dev

如何在symfony2中命名表单?

来自分类Dev

如何在symfony4的表单类中隐藏标签?

来自分类Dev

如何在symfony2中以JSON格式获取错误和堆栈跟踪?

来自分类Dev

如何在symfony2中以JSON格式获取错误和堆栈跟踪?

来自分类Dev

JSON响应使用Flask返回错误的编码

来自分类Dev

Martini中的JSON编码错误

来自分类Dev

codeigniter中的Json编码错误

来自分类Dev

如何在Dart中创建JSON可编码类

来自分类Dev

如何在javascript中获取json编码数组的长度?

来自分类Dev

如何在Ruby中对JSON进行URL编码

来自分类Dev

Json如何在yii2中编码?