首页 文章

在Laravel 5.3 REST中验证错误消息为JSON

提问于
浏览
9

我的应用程序在api endpoints 通过 POST 请求创建一个新条目 .

现在,如果任何验证失败,则laravel 5.3将请求重定向到主页,而不是返回错误json .

这是我的控制器:

public function create( Request $request )
{
    $organization = new Organization;

    // Validate user input
    $this->validate($request, [
        'organizationName' => 'required',
        'organizationType' => 'required',
        'companyStreet' => 'required'
    ]);

    // Add data 
    $organization->organizationName = $request->input('organizationName');
    $organization->organizationType = $request->input('organizationType');
    $organization->companyStreet = $request->input('companyStreet');
    $organization->save();
    return response()->json($organization);
}

如果验证没有问题,那么实体将成功添加到数据库中,但如果验证请求存在问题,则不会将所有错误消息作为json响应发送,而是重定向回主页 .

我如何将验证返回类型设置为json,因此对于每个请求,如果验证失败,则laravel将默认将所有错误消息作为json发送 .

2 回答

  • 3

    您可以进行以下验证:

    $validator = \Validator::make($request->all(), [
           'organizationName' => 'required',
           'organizationType' => 'required',
           'companyStreet' => 'required'
        ]);
    
        if ($validator->fails()) {
           return response()->json($validator->errors(), 422)
        }
    
  • 6

    问题中使用的验证按照laravel的建议进行查看 . 重定向的原因是它抛出了一个异常,您可以使用下面的代码轻松捕获它 . 所以最好使用推荐的代码方式,而不是重新编写框架代码:)

    public function create( Request $request )
    {
        $organization = new Organization;
    
        // Validate user input
        try {
            $this->validate($request, [
                'organizationName' => 'required',
                'organizationType' => 'required',
                'companyStreet' => 'required'
            ]);
        } catch (ValidationException $e) {
            return response()->json($e->validator->errors(), 422);
        }
    
        // Add data 
        $organization->organizationName = $request->input('organizationName');
        $organization->organizationType = $request->input('organizationType');
        $organization->companyStreet = $request->input('companyStreet');
        $organization->save();
        return response()->json($organization, 201);
    }
    

相关问题