2016-12-12 6 views
0

Ich baue eine API in Laravel und verwende eine benutzerdefinierte Anfrage, um die eingehenden Daten zu validieren. Mein Problem ist, dass ich mir nicht sicher bin, wie ich die Validierungsfehler "gefangen" habe, um die Antwort zu formen.Laravel catch Validationexception in benutzerdefinierter Anfrage

Hier ist, was ich bisher habe.

Register-Methode in einer Transaktion eingewickelt:

//Create User Request extends standard request. Handles Validation 

    public function __construct(CreateUserRequest $request){ 
     $this->request = $request; 
    } 

    public function register() 
    { 
    try{ 

     $array = DB::transaction(function(){ 

      $email = $this->request->input('email'); 
      $password = $this->request->input('password'); 
      $companyName = $this->request->input('companyName'); 
      $userName = $this->request->input('name'); 
      $country = $this->request->input('country'); 

      $company = Company::create([ 
       'name' => $companyName, 
       'active'=>true, 
       'country_id'=>$country 
      ]); 

      $user = User::create([ 
       'company_id' => $company->id, 
       'name'=>'admin', 
       'email' => $email, 
       'password' => $password, 
       'active' =>true 
      ]); 

      if(!$company || !$user) 
      { 
       throw new \Exception('User not created for account'); 
      } 

      return compact('company', 'user'); 
      }); 

     $token = JWTAuth::fromUser($array['user']); 
     return Response::json(compact('token')); 

    } 
    catch(Exception $e) 
    { 
     return Response::json(['error' => $e->getMessage() ], HttpResponse::HTTP_CONFLICT); 
    } 

    } 

Das Formular Anfrage sieht wie folgt aus:

class CreateUserRequest extends FormRequest 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      'email' => 'required|unique:users', 
      'password' => 'required', 
      'companyName' => 'required', 
      'name' => 'required', 
      'country' => 'required|numeric' 
     ]; 
    } 
} 

Mein Fehler automatisch zurück kommen, die das messagebag Objekt JSON serialisiert zu sein scheinen

{"email":["The email has already been taken."]}{"email":["The email has already been taken."]} 

Irgendwo dort muss ich die Ausnahme i fangen Neben dem Hauptcontroller, aber ich habe die Custom Request-Klasse verwendet, um meinen Controller ein bisschen aufzuräumen, wie würde ich das tun? Beachten Sie die Exception, die bereits in diesem Controller abgefangen wurde und scheinbar nicht die in der benutzerdefinierten Anfrage hinter den Kulissen geworfenen Exceptions aufgreift.

irgendwelche Zeiger? Muss ich die Validierung zurück zum Controller verschieben? oder gibt es einen saubereren Weg, dies zu tun?

Antwort

2

Sie können Überschreibung die Antwortverfahren in CreateUserRequest die Antwort anzupassen:

public function response(array $errors) 
{ 
    return parent::response($errors); 
} 
+0

Ja, das wie es es tun sieht, habe ich var_dumped nur Fehler $ .. eine Idee Warum kann ich zwei Fehler in JSON haben? – Paul

+0

Nur doppelte E-Mail? Sendet die Anfrage, ohne dass ein anderes Feld als Name benötigt wird –

Verwandte Themen