LilaPHP

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 First

To 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 empty
  • email — Must be valid email format
  • numeric / integer — Must be numerical
  • min:N — Minimum string length or numeric value
  • max:N — Maximum string length or numeric value
  • in:foo,bar — Value must match one of listed items
  • url — Must be valid URL format
  • regex:/pattern/ — Custom PCRE pattern matching