# Request Input + Validation Letzte Aktualisierung: 2026-03-06 Kurzstandard fuer neue Actions/Endpoints. ## Regeln - Input immer ueber `requestInput()`. - Validierungsfehler intern immer als `FormErrors`. - API-Validation immer mit `ApiResponse::validationFromFormErrors(...)`. - Web-Templates bekommen kompakte Fehlerlisten (`$errors`) aus `toFlatList()`. - `Flash` ist fuer Redirect-/Outcome-Meldungen (z. B. Success) gedacht, nicht als primaerer Validation-Container. - Bei Redirect-POST-Formen: `FormErrors` intern sammeln und erst am Redirect-Rand transportieren (z. B. `flashFormErrors(...)`). ## Web-Beispiel (Action) ```php $request = requestInput(); $errorBag = formErrors(); if ($request->isMethod('POST')) { if (!Session::checkCsrfToken()) { $errorBag->addGlobal(t('Form expired, please try again')); } if (!$errorBag->hasAny()) { $result = $service->save($request->bodyAll()); $errorBag->merge($result['errors'] ?? []); } } $errors = $errorBag->toFlatList(); ``` ## API-Beispiel (Endpoint) ```php $request = requestInput(); $errors = formErrors(); if ($request->bodyString('name') === '') { $errors->add('name', 'required'); } if ($errors->hasAny()) { ApiResponse::validationFromFormErrors($errors); } ``` ## Migration-Gates ```bash rg -n '\\$_POST|\\$_GET|\\$_FILES|REQUEST_METHOD' pages -g '*.php' rg -n 'ApiResponse::readJsonBody\\(' pages/api/v1 -g '*.php' ``` Erwartung jeweils: `0` Treffer.