2017-02-14 4 views
0

私はルートでこのルートを持っている/ api.phpAPIでLaravel Validationを使用するにはどうすればよいですか?

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

マイLoginController

class LoginController extends Controller { 

public function register(Request $request) { 
    $this->validate($request, // <-- using this will return the view 
     // from **web.php** instead of the expected json response. 
    [ 
     'email' => 'required|email', 
     'firstName' => 'required|alpha_dash', 
     'lastName' => 'required', 
     'password' => 'required|confirmed', 
    ]); 

    $input = $request->all(); 
    //$plain_password = $input['password']; 
    $input['uuid'] = uuid(); 
    $input['password'] = Hash::make($input['password']); 

    $user = User::create($input); 

    dd($errors); 

    $response['succes'] = true; 
    $response['user'] = $user; 
    return response($response); 
    } 
} 

なぜ検証コールが私の見解を返すに動作を変更追加しません/間違ったルート。私はapiが自分の "フロントエンド"だけでなく、私の要求も検証したいと思っています。

答えて

1

コントローラからLaravelvalidateメソッドを使用すると、検証が失敗した場合、自動的に処理/処理を行います。したがって、必要なコンテンツタイプ/要求タイプに応じて、リダイレクトするか、指定したURLに返すか、またはjson応答を送信するかどうかが決定されます。あなたの検証が失敗したときに最終的には、以下のTHOSのような何かが起こる:

protected function buildFailedValidationResponse(Request $request, array $errors) 
{ 
    if ($request->expectsJson()) { 
     return new JsonResponse($errors, 422); 
    } 

    return redirect()->to($this->getRedirectUrl()) 
        ->withInput($request->input()) 
        ->withErrors($errors, $this->errorBag()); 
} 

だから、最初のif文が真であるならば、あなたはjsonレスポンスを得るでしょうし、あなたがajaxリクエストを送信するか、どちらかの場合、それは本当でしょうjson応答(リモートサーバーからの要求時)を受け入れるように、acceptヘッダーを添付してください。したがって、要求が要件を満たしていることを確認してください。

また、Validatorコンポーネントを使用してリクエストを手動で検証し、失敗した場合はjson応答を明示的に返すことができます。

+0

私の解決策は、ヘッダ: 'X-Requested-With:XMLHttpRequest'を追加していますか?このテストはうまくいくが、ベストプラクティスなのだろうか? –

+0

これは 'Symfony Request'の' ajax'リクエストの 'Laravel Request'での動作です。 –

+0

コントローラー機能でハーココードすることはできますか? –

関連する問題