Validierung bedeutet, zu prüfen, ob vom Nutzer übermittelte Daten das erwartete Format und die Bedingungen erfüllen.
Laravel bietet dafür die einfache, aber leistungsfähige validate-Methode am Request-Objekt sowie eigene Form-Request-Klassen.
Der einfachste Weg ist der Aufruf von $request->validate() im Controller.
Schlägt die Validierung fehl, leitet Laravel automatisch zurück und speichert die Fehler in der Session.Routen:
use App\Http\Controllers\PostController;Route::get('/post/create', [PostController::class, 'create']);Route::post('/post', [PostController::class, 'store']);
Controller:
<?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', ]); // Mit den validierten Daten speichern... return redirect('/posts'); }}
validate erwartet ein Array aus Feldname → Regel.
Regeln trennen Sie per Pipe | oder in einem Array.
Nach einer fehlgeschlagenen Validierung stellt Laravel automatisch die Variable $errors in allen Views zur Verfügung.
Dafür sorgt die Middleware ShareErrorsFromSession aus der web-Gruppe.
Wenn die Validierungslogik komplexer wird, verlagern Sie sie in eine „Form-Request”-Klasse.
Ein Form Request bündelt Validierungs- und Autorisierungslogik in einer eigenen Request-Klasse.
Prüft, ob der Nutzer diese Aktion ausführen darf.
true = erlaubt, false = automatisches 403 Forbidden.Wollen Sie nur angemeldete Nutzer zulassen, prüfen Sie mit auth()->check(). Für Tutorials reicht true.
Gibt authorize()false zurück, wird die Controller-Methode nicht ausgeführt und ein 403 zurückgegeben.
Deklarieren Sie den Form Request einfach als Parameter. Die Validierung läuft vor der Methodenausführung.
use App\Http\Requests\StorePostRequest;class PostController extends Controller{ public function store(StorePostRequest $request): RedirectResponse { // Kommt der Code hier an, ist alles validiert $validated = $request->validated(); Post::create($validated); return redirect('/posts'); }}
$request->validated() liefert nur die validierten Daten.
use App\Http\Controllers\PostController;Route::get('/posts/create', [PostController::class, 'create']);Route::post('/posts', [PostController::class, 'store']);
2
Form Request erzeugen
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
Controller implementieren
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'); }}