繁体   English   中英

Symfony3 - 处理JSON Rest API错误的最佳方法?

[英]Symfony3 - Best way to handle errors in JSON Rest API?

我正在使用symfony3开发一个简单的Rest API(仅限JSON)。 我使用Forms来验证实体,但我无法找到一个足够好的方法来处理表单错误并返回一个有意义的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。 但我不确定这是否是处理表单错误的正确方法。 我已经阅读了很多关于创建REST API和使用symfony处理错误的正确方法的文章。 许多文章都在使用FOSRestBundle,但我无法在简单的仅JSON API中使用此包。

有人可以给我一些建议如何正确处理symfony3 REST API中的错误吗? 在当前的例子中,您是否有充分的理由使用FOSRestBundle?

谢谢!

如果您的表单无效,您可以检索以下错误:

    $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响应中返回这些数据,在客户端,您可以处理这些错误。 由于您具有字段名称,因此可以在适当的表单字段附近显示它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM