2017-12-18 13 views
1

私のLaravel 4.2プロジェクトの検証は、Ardentパッケージで行われました。 Laravel 5.5に行った後、私はArdentを削除し、フォーム要求でLaravelのネイティブ検証を行いたいと考えました。Laravelカスタム検証とajax

私が持っている問題は、Ajax呼び出しは次のように前に検証されたことである。

public function postRegisterAjax(A) 
{ 
    try { 
     ... 
    } catch (ExceptionBag $e) { 
     $msg = $e->getMessageBag()->all(':message'); 
     $status = Status::ERROR; 
    } 

    return $this->responseJson($status, $msg); 
} 

は今、私は UserValidationRequestクラスを導入して、私はページをリロードすることなく、私にエラーメッセージをスローするようにAjax呼び出しをしたいと思います。そのためには、私はJsonレスポンスとしてステータスとメッセージを転送する必要があります。

私は何とか検証フックの後であることを実行しようとしましたが、それは動作しません:

protected function getValidatorInstance() 
{ 
    $validator = parent::getValidatorInstance(); 

    if ($validator->fails()) { 
     \Log::info($validator->errors()); 

     $msg = $validator->errors(); 
     $status = Status::ERROR; 

     return response()->json(['response' => [ 
      'status' => $status, 
      'msg' => $msg, 
     ]]); 
    } 

    return $validator; 
} 

コードがMethod passes does not existIlluminate/Support/Traits/Macroable.php:96)というreturn response()に失敗しました。

誰かが問題と思われることを知っていますか?

答えて

0

Laravel 5.xバージョン(わからない)からは、Laravel 4.xが持っていたものの代わりにfailedValidation()メソッドがフォームリクエストに導入されました。response()です。

public function failedValidation(Validator $validator) 
{ 
    if ($validator->fails()) { 
     $status = Status::ERROR; 
     throw new HttpResponseException(response()->json(["response" => [ 
      'msg' => $validator->errors()->all(':message'), 
      'status' => $status 
     ]])); 
    } 

    return response()->json(["response" => [ 
     'msg' => 'User successfully registered', 
     'status' => Status::SUCCESS 
    ]]); 
} 

私は、フォームのリクエストで、そのメソッドをオーバーライドすることにより、自分のニーズへの対応を調整することによって、私の問題を解決しました

関連する問題