2016-09-13 16 views
0

APIのカスタム検証json応答が必要です。今のところ、このカスタム検証エラー形式laravel 5.2

{"password":["The password must be at least 6 characters."],"type":["The type field is required."]} 

のようなデフォルトのエラーメッセージの何かが、私は

{flag:0,msg:"The password must be at least 6 characters.",data:{"password":["The password must be at least 6 characters."],"type":["The type field is required."]}} 

をしたいと私は私のREST APIのこのフォーマットをしたいです。どうすれば達成できるのですか?

+0

** FormRequest **または単純な** Validator **を使用していますか? –

+0

私は** Illuminate \ Http \ Request **を使用し、次に** $ this-> validate($ this-> request、$ rules); ** – user1673762

+0

を使用します。要するに、上記のようにMessageBagオブジェクトをカスタマイズします。 – user1673762

答えて

1

検証は、私たちが、私は解決策を見つけた

public function abc(Request $request) 
{ 
    //using try catch to catch the validation exception thrown 
    try{ 
     $this->validate($request, $rules); 
    }catch(\Illuminate\Http\Exception\HttpResponseException $e){ 

     //fetching the error messages 
     $messages = $e->getResponse()->getSession()->get('errors')->getMessages(); 

     //or you can use $messages = session()->get('errors')->getMessages(); 

     $messages = collect($messages); 
     $content = [ 
      'flag' => 0, 
      'data' => $messages->toArray(), 
      'msg' => $messages->first()[0] 
     ]; 

     return response()->json($content, 400); 
    } 

} 
+0

これは動作しますが、私のAPIのすべての新しいサービスにこのコードを追加する必要があります。または、この例外を '例外\ Handler.php'で処理できます。私は別の解決策を見つけました。 – user1673762

2

お使いのコントローラのアクションに次の操作を行いキャッチし、

に作用することができますHttpResponseExceptionを発射します。

親コントローラを変更し、formatValidationErrorsメソッドを追加しました。ここには

namespace App\Http\Controllers; 
use Illuminate\Foundation\Bus\DispatchesJobs; 
use Illuminate\Routing\Controller as BaseController; 
use Illuminate\Foundation\Validation\ValidatesRequests; 
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; 
use Illuminate\Foundation\Auth\Access\AuthorizesResources; 
use Illuminate\Contracts\Validation\Validator; 
class Controller extends BaseController 
{ 
    use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests; 

    protected function formatValidationErrors(Validator $validator) 
    { 
     $res = $validator->errors()->all(); 
     if(\Request::wantsJson()) 
     { 
      $res = ["flag" => 0, 
        "msg" => $validator->errors()->first()]; 
      $res['data'] = $validator->errors()->all(); 
     } 
     return $res; 
    } 
} 
+0

はい、これが動作することを確認しました –

関連する問題