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

russeloken
a répondu

Chef partage nous ton code.

WellGatse
a répondu

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

WellGatse
a répondu

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

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

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

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

php artisan make:request

Ensuite

<?php
 
namespace App\Http\Requests;
 
use Illuminate\Foundation\Http\FormRequest;
 
class RequestName extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
 
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'champ' => 'regles|de|validation',
//Differentes regles de validation
];
}
 
public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator): void
{
//Action realise en cas d'echec de validation
}
}

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:

use App\Http\Requests;
 
public function method(Requests\RequestName $request): ReturnType
{
$var = $request->champ;
}
 
// ou
 
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
 
public function method(Request $request): ReturnType
{
//Ensuite dans ta methode
 
$validator = Validator::make($request->all(), [
"champ" => "differentes|regles"
]);
if ($validator->fails()){
//Logique de echec
}
$var = $request->champ;
}
WellGatse
a répondu

Ok je l'essaie rapidement, je revient

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

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 :)

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