J'ai un fichier de demande de formulaire gérant mes validations séparément de mon contrôleur. Comment renvoyer des erreurs de validation après un appel d'API dans le contrôleur?
// mon contrôleur
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function orders(GetOrdersRequest $request, OrderRepository $orderRepository)
{
$order = $orderRepository->allOrders($request->paginate);
return $this->sendSuccess('Orders retrieved successfully', $order);
}
4 Réponses :
La classe de requête Laravel renvoie automatiquement lorsque la validation échoue. Vous devez afficher vos messages d'erreur dans le fichier de vue (lame). Vous pouvez suivre la documentation officielle .
Pour les API, il renvoie automatiquement une réponse JSON comprenant des messages d'erreur.
En principe, vous pouvez le faire dans un fichier lame:
@if($errors->has('email'))
<span class="error">{{ $errors->get('email') }}</span>
@endif
Merci mais je n'utilise pas la lame. J'implémente des apis qui seront consommés par un framework frontend.
Comme je l'ai dit, "Pour les API, il renvoie automatiquement une réponse JSON comprenant des messages d'erreur". Vous n'avez rien de spécial à faire. Laravel s'en occupe.
D'accord merci. Mais pour certaines raisons, je ne reçois aucun message d'erreur. Je ne suis redirigé que vers l'écran d'accueil de laravel - j'utilise postman
"Accept: application / json" ajoute cet en-tête au facteur comme en-tête. Les frameworks frontend utilisent ajax donc ils n'ont pas besoin d'ajouter cet en-tête. Mais lorsque vous essayez le facteur, vous devez ajouter.
afin que vous puissiez sélectionner ce message comme réponse?
Je pense que ce n'est pas possible, mais vous pouvez utiliser la méthode prepareForValidation () dans votre FormRequest et manipuler les données avant de valider.
c'est possible. J'ai dû ajouter l'en-tête Accept: application / json dans mon facteur
Vous ne pourrez pas récupérer les erreurs de cette manière car le FormRequest lèvera une exception avant que la requête n'atteigne votre contrôleur en cas d'erreur de validation. Cependant, vous pouvez détecter l'erreur dans le formulaire request lui-même et y modifier la réponse en utilisant la méthode failedValidation
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
class OrderRequest extends FormRequest
{
public function authorize()
{
//
}
public function rules()
{
//
}
public function failedValidation(Validator $validator)
{
$errors = $validator->errors(); // Here is your array of errors
throw new HttpResponseException($errors);
}
}
Même lors de l'utilisation de la demande de formulaire, Laravel gère automatiquement la validation pour vous sans que vous fassiez quoi que ce soit. En cas d'échec de la validation, une erreurs sera renvoyée à laquelle vous pouvez accéder dans votre réponse à la demande. response.data.errors (selon la bibliothèque que vous utilisez pour les requêtes, bien sûr) contiendra les erreurs. Par exemple:
errors: {
name: ["The name must be at least 2 characters"]
}
Ceci est juste un exemple factice. Faites un test rapide en forçant la requête à échouer et consignez la réponse sur la console pour voir comment elle s'affichera.