web-dev-qa-db-fra.com

Validation de Laravel 5 - Retour en json/ajax

J'essaie de publier les valeurs dans la validation et de renvoyer la réponse sous forme json plutôt que return view, comme indiqué dans la documentation.

    $validator = Validator::make($request->all(), [
        'about' => 'min:1'
    ]);

    if ($validator->fails()) {
        return response()->json(['errors' => ?, 'status' => 400], 200);
    } 

Le message est créé par ajax, je dois donc également recevoir la réponse en ajax.

J'ai compris que pour empêcher l'actualisation de la page dans la réponse renvoyée, je devais lui donner un code d'état de 200 en dehors du tableau. Mais je ne savais pas quoi donner à la partie 'errors'. Que devrais-je écrire ici?

16
senty

Vous pouvez utiliser $validator->messages() qui renvoie un tableau contenant toutes les informations sur le validateur, y compris les erreurs. La fonction json prend le tableau et le code sous forme de chaîne json.

if ($validator->fails()) {    
    return response()->json($validator->messages(), 200);
}
25
Peyman.H

Dans Laravel 5.4, la méthode validate() peut automatiquement détecter si votre requête est une requête AJAX et envoyer la réponse du validateur en conséquence. 

Voir la documentation ici

Si la validation échoue, une réponse de redirection sera générée pour renvoyer l'utilisateur à son emplacement précédent. Les erreurs seront également clignotées dans la session pour pouvoir être affichées. Si la demande était une demande AJAX, une réponse HTTP avec un code d'état 422 sera renvoyée à l'utilisateur, y compris une représentation JSON des erreurs de validation.

Donc, vous pouvez simplement faire ce qui suit:

Validator::make($request->all(), [
    'about' => 'min:1'
])->validate();
4
Jones03

Je pense que si vous soumettez une demande Ajax, vous obtiendrez automatiquement une réponse JSON.

Peut-être que quelque chose comme ceci serait approprié en fonction de votre exemple:

$validator = \Validator::make($request->all(), $this->rules());

if ($validator->fails()) {
   return response()->json($validator->errors(), 422)
}
0
mehdi