WellGatse
a posé

validation des données à partir d'une classe Request

Bonjour à tous! Je suis nouveau dans le forum. Je suis confronter à un problème de récupération de données vias la classe Request qui gère la préparation et la validation des données avant qu'elles n'arrivent au niveau du controleur. Quelqu'un ici peut-il m'aider à resoudre le pb?

darwin_nathan
a répondu

Peux tu nous laisser le code, pour pouvoir mieux savoir de quoi tu parles

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

russeloken
a répondu

Chef partage nous ton code.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

WellGatse
a répondu

le code du controleur qui récupère les données de la classe de validation, eexcusez pour la redondance:

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

darwin_nathan
a répondu

Comme conseil je peux te donner un conseil. Pour cela, il y'a plusieurs methodes: Tu peux utiliser le validateur

1use Illuminate\Support\Facades\Validator;
2 
3//Ensuite dans ta methode
4$validator = Validator::make($request->all(), [
5 "champ" => "differentes|regles"
6]);
7if ($validator->fails()){
8 //Logique de echec
9}
1use Illuminate\Support\Facades\Validator;
2 
3//Ensuite dans ta methode
4$validator = Validator::make($request->all(), [
5 "champ" => "differentes|regles"
6]);
7if ($validator->fails()){
8 //Logique de echec
9}

Ou encore en utilisant une FormRequest. Pour cela tu vas d'abord taper la commande

1php artisan make:request
1php artisan make:request

Ensuite

1<?php
2 
3namespace App\Http\Requests;
4 
5use Illuminate\Foundation\Http\FormRequest;
6 
7class RequestName extends FormRequest
8{
9 /**
10 * Determine if the user is authorized to make this request.
11 */
12 public function authorize(): bool
13 {
14 return true;
15 }
16 
17 /**
18 * Get the validation rules that apply to the request.
19 *
20 * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
21 */
22 public function rules(): array
23 {
24 return [
25 'champ' => 'regles|de|validation',
26 //Differentes regles de validation
27 ];
28 }
29 
30 public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator): void
31 {
32 //Action realise en cas d'echec de validation
33 }
34}
1<?php
2 
3namespace App\Http\Requests;
4 
5use Illuminate\Foundation\Http\FormRequest;
6 
7class RequestName extends FormRequest
8{
9 /**
10 * Determine if the user is authorized to make this request.
11 */
12 public function authorize(): bool
13 {
14 return true;
15 }
16 
17 /**
18 * Get the validation rules that apply to the request.
19 *
20 * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
21 */
22 public function rules(): array
23 {
24 return [
25 'champ' => 'regles|de|validation',
26 //Differentes regles de validation
27 ];
28 }
29 
30 public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator): void
31 {
32 //Action realise en cas d'echec de validation
33 }
34}

A toi de voir celle qui permettra la validation

Des que tous les champs respecte les regles de validation dans ton controller ou ton action tu n'aura plus qu'a:

1use App\Http\Requests;
2 
3public function method(Requests\RequestName $request): ReturnType
4{
5 $var = $request->champ;
6}
7 
8// ou
9 
10use Illuminate\Http\Request;
11use Illuminate\Support\Facades\Validator;
12 
13public function method(Request $request): ReturnType
14{
15 //Ensuite dans ta methode
16 
17 $validator = Validator::make($request->all(), [
18 "champ" => "differentes|regles"
19 ]);
20 if ($validator->fails()){
21 //Logique de echec
22 }
23 $var = $request->champ;
24}
1use App\Http\Requests;
2 
3public function method(Requests\RequestName $request): ReturnType
4{
5 $var = $request->champ;
6}
7 
8// ou
9 
10use Illuminate\Http\Request;
11use Illuminate\Support\Facades\Validator;
12 
13public function method(Request $request): ReturnType
14{
15 //Ensuite dans ta methode
16 
17 $validator = Validator::make($request->all(), [
18 "champ" => "differentes|regles"
19 ]);
20 if ($validator->fails()){
21 //Logique de echec
22 }
23 $var = $request->champ;
24}
Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

WellGatse
a répondu

Ok je l'essaie rapidement, je revient

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

russeloken
a répondu

Dans la méthode store du BlogController, tu utilises CreateRequest comme type de paramètre. Laravel injecte donc automatiquement cette requête validée. Assure-toi que la validation est bien exécutée en plaçant un dd($request->all()); au début de la méthode store pour voir si les données arrivent correctement.

Supprimer la validation manuelle avec Validator::make

  • Tu utilises Validator::make($request->all(), [...]), mais ce n'est pas nécessaire puisque tu utilises déjà une FormRequest (CreateRequest).

  • Laravel effectue la validation avant même d’exécuter le code de la methode store du contrôleur. Si la validation échoue, Laravel retournera directement une réponse d'erreur, donc ce bloc n'est pas necessaire.

Dans ton fichier CreateRequest.php, la validation du champ content n'est pas bonne elle est écrite comme ceci :

'content'=>['Required'] au lieu de 'content' => ['required']

Faudra lire cette partie de la doc de Laravel validation plus precisement

validation#form-request-validation

Pense également à regarder comment les sujets sont créés sur la communauté, afin de pouvoir mieux poser tes problèmes à l'avenir. Bon courage ! exemple

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

mckenziearts
a répondu

@WellGatse c'est mieux de copier-coller ton code pour qu'on puisse rapidement voir et même le copier pour le tester plus rapidement et te proposer une solution rapidement :)

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

WellGatse
a répondu

Le code qui gère la validation des données avant de les tranférer au controleur requis:

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

Il faut Se connecter ou Créer un compte pour participer à cette conversation.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer ce sujet ? Cette action est irréversible.