2016-10-27 8 views
6

私のアプリは、apiエンドポイントのPOSTリクエストで新しいエントリを作成しています。Laravel 5.3のJSONとしての妥当性検査エラーメッセージREST

検証が失敗した場合、エラーjsonを返す代わりに、laravel 5.3が要求をホームページにリダイレクトします。ここで

は私のコントローラです:

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として送信します。

答えて

4

としてあなたの検証を行うことができます。質問に使用される検証はlaravelによって推奨されているように見えます

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

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

。リダイレクトの理由は、以下のコードを使用して簡単にキャッチできる例外をスローすることです。したがって、フレームワークのコードを書き直すのではなく、推奨されるコードを使用する方が良いでしょう:)

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); 
} 
+0

私は試してみます!ありがとうございます\ – rakibtg

+0

@rakibtgあなたは歓迎ですが、要件を満たしている場合は、答えを受け入れることを忘れないでください。 –

関連する問題