Apariencia
Validación de datos en el servidor
Validator aplica reglas PHP a un array y devuelve true o false. No valida campos del navegador ni enlaza errores automáticamente con controles HTML.
Uso y reglas
php
use Boctulus\Simplerest\Core\Libs\ValidationRules;
use Boctulus\Simplerest\Core\Libs\Validator;
$rules = (new ValidationRules())
->field('email')->type('email')->required()
->field('age')->type('int')->min(18)->max(120)
->getRules();
$validator = new Validator();
if (!$validator->validate($data, $rules)) {
$errors = $validator->getErrors();
}ValidationRules ofrece field, type, required, min, max, between, notBetween, in, notIn y getRules. Las reglas directas también aceptan set, not_in, longitudes, structure y mensajes.
El dispatcher mapea tipos como boolean, integer, float, number, string, email, URL, MAC, dominio, fecha, hora, datetime, JSON y object, además de variantes y aliases. regex:<patrón> y decimal(total,decimales) usan ramas especiales. either aparece en la tabla, pero el método requiere opciones que isType() no pasa; no se debe asumir que funcione. getErrors() informa por campo; getWarnings() expone advertencias. El validador no normaliza ni corrige valores.
Reglas y semánticas
requiredrechaza ausencias o valores vacíos cuando está activo;setRequired(false)desactiva ese rechazo.skipBoundsChecks(true)omite límites, pero no tipos, listas ni unicidad.ignoreFields([...])ignora un campo presente; la detección de ausencia ocurre antes de esa rama.- Las listas
$fillablesy$not_fillablesrechazan campos, pero no filtran el array. setUniques($fields, $table)consultaexists(); requiere base de datos, no excluye automáticamente el registro actual y no sustituye un índice único.- Los límites dependen de nombres de tipos literales; un alias puede pasar el tipo y no entrar en la misma rama de
minomax.in/not_inusan comparación no estricta. validate($data, null)retornatrue;validate($data, [])lanzaInvalidArgumentException.- Si una regla
arrayrecibe un escalar y además una longitud, el código llega acount()después del error de tipo; esa combinación no está demostrada como segura.
El constructor enlaza el dominio validator de Translate, y el core no declara el paquete i18n como dependencia. La interfaz IValidator es más estrecha que la clase concreta y sólo exige getErrors().
Se inspeccionaron las clases y tests de unit-tests/validator/, sin ejecutarlos. No se probó unicidad contra una base real ni sincronización con reglas del cliente.