API Payload Validation (`Core\Validate`)
In LilaPHP's engine, payload validation is rapid, stateless, and declarative. Instead of creating heavy DTO/Model classes for simple request validation, you can use `Core\Validate::assert()` directly inside your physical route endpoints (`app/routes/*.php` and `app/routes/api/*.php`).
`Validate::assert(array $data, array $rules): array`
Inspects your incoming `$_REQUEST` or array data against strict rule definitions. If any field fails validation, `Validate::assert()` immediately throws a `ValidationException` which outputs a clean JSON 422 Unprocessable Entity response and stops execution (`exit;`). If valid, it returns the sanitized payload array.
<?php
use Core\Response;
use Core\Validate;
$cleanData = Validate::assert($_REQUEST, [
'username' => 'required|min:4|max:30',
'email' => 'required|email',
'age' => 'required|numeric',
'role' => 'in:admin,editor,subscriber'
]);
Response::json(['status' => 'registered', 'user' => $cleanData], 201);
Stateless Localized Errors via `$_REQUEST['lang']`
Performance FirstTo maintain zero session overhead while supporting multilingual APIs, `Core\Validate` reads the `$_REQUEST['lang']` parameter directly (or defaults to `APP_LANG` in `.env`). Error messages are automatically localized from `_core/locales/validation_{lang}.php`.
# Requesting in Spanish:
curl -X POST "http://localhost:8080/api/users/register" \
-d "lang=es" -d "email=bad-email"
# Automatic JSON Response (HTTP 422):
{
"error": "Validation failed",
"errors": {
"email": "El campo email debe ser una dirección de correo válida."
}
}
Available Validation Rules
required— Field cannot be emptyemail— Must be valid email formatnumeric/integer— Must be numericalmin:N— Minimum string length or numeric value
max:N— Maximum string length or numeric valuein:foo,bar— Value must match one of listed itemsurl— Must be valid URL formatregex:/pattern/— Custom PCRE pattern matching