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

时间:2016-10-27 06:59:37

标签: rest laravel laravel-5 laravel-5.3

我的应用正在api端点通过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); } 请求创建新条目。

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

这是我的控制器:

final static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

如果没有与验证,则实体将在数据库中添加成功没有问题,但如果有问题与验证请求,那么,而不是将所有的错误消息的JSON响应它重定向回主页。

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

2 个答案:

答案 0 :(得分:6)

您可以按以下方式进行验证:

    $validator = \Validator::make($request->all(), [
       'organizationName' => 'required',
       'organizationType' => 'required',
       'companyStreet' => 'required'
    ]);

    if ($validator->fails()) {
       return response()->json($validator->errors(), 422)
    }

答案 1 :(得分:3)

问题中使用的验证按照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);
}