docs: restructure docs to diataxis and finalize DOCS-RESTRUCTURE-001
This commit is contained in:
58
docs/howto-request-input-validation.md
Normal file
58
docs/howto-request-input-validation.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user