La validation consiste à vérifier que les données envoyées par un utilisateur satisfont un format et des conditions attendues.
Laravel propose une validation simple et puissante via la méthode validate de l’objet de requête ou des form requests dédiés.
L’appel à $request->validate() dans une méthode de contrôleur est la méthode la plus simple.
En cas d’échec, Laravel redirige automatiquement vers l’écran précédent et stocke les erreurs en session.Déclaration des routes :
use App\Http\Controllers\PostController;Route::get('/post/create', [PostController::class, 'create']);Route::post('/post', [PostController::class, 'store']);
Création du contrôleur :
<?phpnamespace App\Http\Controllers;use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request;use Illuminate\View\View;class PostController extends Controller{ public function create(): View { return view('post.create'); } public function store(Request $request): RedirectResponse { $validated = $request->validate([ 'title' => 'required|string|max:255', 'body' => 'required|string', 'email' => 'required|email', ]); // Enregistrement de la publication avec les données validées... return redirect('/posts'); }}
Passez à validate un tableau : nom du champ en clé, règles en valeur.
Séparez les règles avec | ou passez un tableau.
En cas d’échec, Laravel rend la variable $errors disponible dans toutes les vues, grâce au middleware ShareErrorsFromSession inclus dans le groupe web.
Quand la logique de validation devient complexe, il est efficace de l’externaliser dans une classe « form request ».
Elle regroupe la validation et l’autorisation dans une classe de requête personnalisée.
Détermine si l’utilisateur peut effectuer cette requête.
true autorise, false retourne automatiquement une réponse 403.Pour n’autoriser que les utilisateurs authentifiés, vérifiez avec auth()->check().
Dans un tutoriel, il est acceptable de retourner true.
Si authorize retourne false, la méthode du contrôleur n’est pas exécutée : une réponse 403 est renvoyée.
Il suffit de type-hinter la form request dans la méthode.
La validation s’exécute avant la méthode : vous n’écrivez plus de code de validation dans le contrôleur.
use App\Http\Requests\StorePostRequest;class PostController extends Controller{ public function store(StorePostRequest $request): RedirectResponse { // À ce stade, la requête est validée $validated = $request->validated(); Post::create($validated); return redirect('/posts'); }}
$request->validated() retourne uniquement les données validées.
Exemple : formulaire de création et enregistrement
Enchaînement complet de l’affichage du formulaire à l’enregistrement.
1
Déclaration des routes
use App\Http\Controllers\PostController;Route::get('/posts/create', [PostController::class, 'create']);Route::post('/posts', [PostController::class, 'store']);
2
Création de la form request
php artisan make:request StorePostRequest
public function rules(): array{ return [ 'title' => 'required|string|max:255', 'body' => 'required|string', ];}public function authorize(): bool{ return true;}
3
Implémentation du contrôleur
use App\Http\Requests\StorePostRequest;use App\Models\Post;class PostController extends Controller{ public function create(): View { return view('posts.create'); } public function store(StorePostRequest $request): RedirectResponse { Post::create($request->validated()); return redirect('/posts'); }}