2017-07-06 3 views
0

J'utilise ...Laravel Utiliser ValidationException

$validator = Validator::make(...) 

... pour valider mon entrée. Cependant, au lieu d'utiliser cette méthode, à des fins d'API, je voudrais utiliser la classe Validation Exception de Laravel.

Actuellement, je suis en train:

// Model (Not Eloquent Model) 
Validator::make(...) 

// Controller 
try { $model->createUser(Request $request); } 
catch(ValidationException $ex) 
{ 
    return response()->json(['errors'=>$ex->errors()], 422); 
} 

Cependant, la validation du modèle ne semble pas jeter des exceptions de validation. Je peux toujours obtenir les erreurs en utilisant $validator->errors(). Pourtant, cela continue de vaincre mon but. J'essaie de garder des contrôleurs vraiment propres avec seulement des instructions try et catch; par conséquent, gardant toute la logique et hors des contrôleurs. Comment puis-je utiliser le ValidationException pour faire exactement cela?

Répondre

1

Je ne sais pas ce qui se passe dans votre $model->createUser(Request $request);, mais si vous utilisez alors la façade Validator que vous auriez à traiter la validation vous comme dans:

use Validator; 

... 

$validator = Validator::make($input, $rules); 

if ($validator->fails()) { 
    // With a "Accept: application/json" header, this will format the errors 
    // for you as the JSON response you have right now in your catch statement 
    $this->throwValidationException($request, $validator); 
} 

D'autre part, vous pouvez utiliser la méthode validate() dans votre contrôleur comme il fait tout ce qui précède pour vous:

$this->validate($request, $rules); 
+0

Impressionnant, je n'étais pas au courant de cela. Merci. Je vais le faire à la place, la méthode de validation sur le contrôleur –