2016-04-17 3 views
2

Für die Verwendung von Form Request Validation in Laravel kompatibel sein, habe ich eine StoreCourseRequest Klasse wie folgt:Erklärung formatErrors() sollte mit FormRequest :: formatErrors in Laravel

namespace App\Http\Requests; 

    use App\Http\Requests\Request; 
    use Illuminate\Validation\Validator; 

class StoreCourseRequest extends Request 
    { 
     public function authorize() 
     { 
      return true; 
     } 

     public function rules() 
     { 
      return [ 
       'title'  => 'required', 
       'description' => 'required' 
      ]; 
     } 

     public function messages() 
     { 
      return [ 
       'title.required'  => 'عنوان دوره را وارد کنید', 
       'description.required' => 'توضیحات دوره را وارد کنید', 
      ]; 
     } 


     protected function formatErrors(Validator $validator) 
     { 

      $result = ['success' => false, 'msg' => $validator->errors()->first()]; 

return $result; 
      } 

     } 

Da alle Anforderung als Ajax sendet, ich will Das Format der Fehlermeldungen anpassen, wie Sie im obigen Code sehen.

Aber nach Anforderung sendet, Fehler unten aufgetreten ist:

ErrorException in StoreCourseRequest.php line 9: 
Declaration of App\Http\Requests\StoreCourseRequest::formatErrors() should be compatible with Illuminate\Foundation\Http\FormRequest::formatErrors(Illuminate\Contracts\Validation\Validator $validator) 

Ich denke, dass alles richtig ist, und docs Anweisung folgen formrequest Klasse zu erstellen, aber ich weiß nicht, was dieser Fehler ist und warum auftritt?

Antwort

3

Ändern Sie den Anfang der Datei zu:

namespace App\Http\Requests; 

    use App\Http\Requests\Request; 
    use Illuminate\Contracts\Validation\Validator; 

Wie Sie sehen können in der Fehlermeldung, FormRequest::formatErrors() Methode erfordert $validator param Instanz Illuminate\Contracts\Validation\Validator zu sein, aber Sie haben use Illuminate\Validation\Validator;

+0

Thanks @ drndavi importiert, Ihre Lösung war richtig, aber wie kann ich wieder ändern 'Statuscode: 422 Unprocessable Entity' auf' OK 200' in Ajax Form Anfragen –

+0

Wenn Sie diese Antwort erhalten, dann wurden die übermittelten Daten höchstwahrscheinlich vom Validator als nicht konform befunden, und Sie müssten diese Antwort in Ihrem Frontend behandeln. –

+0

Ich habe der StoreCourseRequest-Klasse eine Antwortmethode wie folgt hinzugefügt: 'öffentliche Funktion Antwort (Array $ Fehler) \t \t { \t \t \t Antwort Antwort() -> Json ($ Fehler, 200); \t \t} ' –

1

Die Fehlermeldung besagt, dass Ihre Deklaration der Methode formatErrors mit der der übergeordneten Klasse, die Sie überschreiben möchten, nicht kompatibel ist.

Sie aliasieren Illuminate\Validation\Validator bis Validator, aber die Methode erwartet einen Validator vom Typ Illuminate\Contracts\Validation\Validator. Versuchen Sie, die importierte Validator Klasse zu ändern.

So ändern line ~ 4 aus:

use Illuminate\Validation\Validator;

zu

use Illuminate\Contracts\Validation\Validator;

Verwandte Themen