2017-01-17 10 views
1

モバイルアプリからファイルをアップロードするための簡単なAPIを作成しています。API - Laravelでリクエストを確認する

Route::post("/file", '[email protected]'); 

その後、私のコントローラで、私は要求を検証::私は定義されたルートを持っている私のroutes/api.phpファイルで

public function upload(Request $request){ 

    $this->validate($request, [ 
      'name' => 'required', 
      'file' => 'file', 
      'type' => 'required|in:sign,photo', 
     ]); 

    // do something here.... 

} 

要求が正しいか(それが検証に合格)すべての作品そしてLaravelはJSONレスポンスを返します。

リクエストが検証に合格しない場合、つまりnameフィールドがない場合、Laravelは302ページを返し、ログインページにリダイレクトしようとします。

302リダイレクトページではなく、検証に失敗した場合にJSONメッセージで適切な40X/50Xエラーを返すにはどうすればよいですか?

私は、API呼び出しのテストにLaravel 5.3とInsomniaを使用しています。

答えて

3

validateメソッドは、通常のリクエストではリダイレクトを返し、AJAXリクエストではJSONを返します。

validateメソッドは、受信HTTPリクエストと一連の検証ルールを受け入れます。検証ルールが合格すると、コードは正常に実行され続けます。ただし、検証に失敗すると例外がスローされ、適切なエラー応答が自動的にユーザーに返されます。従来のHTTPリクエストの場合、リダイレクトレスポンスが生成され、JSONレスポンスはAJAXリクエストに対して送信されます。

だから、あなたはいくつかの選択肢があり、ここにカップルされていますので、Laravelはそれはあなたがあなたのバリデータを作成し、それにfails()を呼び出すことができますAJAX要求

  • ある

    • あなたはX-Requested-Withヘッダーを設定することができますを考えて

    $validator = Validator::make($input, $rules); 
    if ($validator->fails()) { 
        // Custom Response 
    } 
    
    :あなたが望むようにあなたの応答扱います

    APIを作成している場合は、特定の目的に合わせて細かく調整されているので、代わりにLumenを使用することを検討してください。さらに、検証はdefaults to returning a JSON responseです。

  • +2

    ありがとう、X-Requested-Withがトリックをしました。しかし、まだ不思議なことに、InsomniaからのリクエストがAJAXリクエストとして正しく認識されていないということは少し奇妙です。 – Gacek

    関連する問題