Symfony3 - 处理JSON Rest API中错误的最佳方法是什么?

3

我正在使用Symfony3开发一个简单的Rest API(仅支持JSON)。我使用表单来验证实体,但我无法找到足够好的方法来处理表单错误并返回有意义的JSON错误响应。以下是我的控制器中的示例操作:

/**
 * @Route("/user/add" , name="addUser")
 * @Method({"POST"})
 *
 * @param Request $request
 * @return JsonResponse
 */
public function registerAction(Request $request) {
    $user = new User();
    $form = $this->createForm(UserType::class, $user, ['validation_groups' => ['registration']] );
    $form->handleRequest($request);

    if(!$form->isValid()){
        //TODO: Handle errors properly
    }

    $this->get('user_service')->addUser($user);

    $userModel = new UserModel($user);

    return new JsonResponse($userModel);
}

我考虑抛出一个包含表单数据/错误的自定义异常,然后在自定义异常监听器中处理异常,解析表单并返回JsonResponse。但我不确定这是否是处理表单错误的正确方式。我已经阅读了很多关于使用Symfony创建REST API和处理错误的正确方法的文章。许多文章都使用FOSRestBundle,但我无法理解为什么要在一个简单的JSON API中使用此bundle。
请问是否有人能够给出如何正确处理Symfony3 REST API中的错误的建议?同时,您认为在当前示例中使用FOSRestBundle是否有充分的理由?
谢谢!
1个回答

9
如果您的表单无效,您可以像这样检索错误信息:

如果您的表单无效,则可以像这样检索错误:

    $errors = [];
    foreach ($form->getErrors(true) as $error) {
        if ($error->getOrigin()) {
            $errors[$error->getOrigin()->getName()][] = $error->getMessage();
        }
    }

您将获得一个填充有一个或多个错误的字段的数组:
[
   'field_name' => [
       'text of error 1',
       'text of error 2',
    ],
   'other_field_name' => [
       'text of error 1',
    ],
]

然后在您的JSON响应中返回这些数据,在客户端上您可以处理这些错误。由于您拥有字段名称,因此可以将它们显示在相应的表单字段附近。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接