当前位置: 首页 > 面试题库 >

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

宗政博
2023-03-14
问题内容

我想创建一个向其提交表单的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);


 类似资料:
  • 问题内容: 我有一个Django表单,正在正常的Django视图中进行验证。我试图弄清楚如何提取纯错误(无HTML格式)。以下是我目前正在使用的代码。 这样,我从Django得到了臭名昭著的代理对象错误。将每个错误强制为Unicode也不会成功,因为每个错误的方法都会被有效地称为HTML大小化。 有任何想法吗? 编辑: 对于那些感兴趣的人,这是的定义: 问题答案: 经过 一番 摸索,测试了不同的东

  • 问题内容: 我正在尝试从Symfony 2中的控制器返回JSON响应。表单示例,在Spring MVC中,我可以使用@ResponseBody注释获取JSON响应。我想获取一个JSON响应,如果它是JSON数组或Json对象,则不返回任何内容,然后在视图中使用javascript对其进行操作。 我尝试下一个代码: 但是我在浏览器中得到响应。我也尝试过,但是得到相同的结果。 问题答案: 您需要执行此

  • 我希望在spring boot中返回类似以下内容的json响应: 我的RestController如下所示 但我得到的反应是这样的

  • 但是我希望错误消息不是文本格式的,而是JSON格式的。我该怎么办?

  • 问题内容: 我有一个返回JSON的MVC控制器。我想使用jQuery读取/获取JSON并遍历JSON项目/行。 基本上,我正在阅读一堆评论,然后逐一显示评论。 有人有代码示例吗? 我正确地获取了json。请参阅下面的返回数据。 谢谢 编辑: 如何循环这些由控制器返回的json?我需要循环3次,然后对于每一行,我需要访问该行中的所有键和值。 问题答案: 第一个问题的答案是允许Json在GET中工作。

  • 问题内容: 我使用asp.net和网络表单。在我的项目中,我有asmx Web服务 结果就是这种格式。 如何在$ .ajax成功中附加此结果标签以获取此输出: 1-测试1,2-测试2。 问题答案: 而是返回列表,并使用[ScriptMethod(ResponseFormat = ResponseFormat.Json)]属性- 它将自动创建JSON对象作为返回: 在JS方面: