Definir tu primer campo personalizado
Un recorrido enfocado en un solo campo: cambia su tipo, valida su entrada y luego bloquéalo para edición.
1. Cambiar el tipo
Empieza con ->change_type($field, $type, $length = '', $extra = []) para elegir cómo se renderiza el campo en el formulario:
$xcrud->change_type('email', 'text');
Consulta Resumen de tipos de campo para la lista completa de tipos disponibles.
2. Validar su valor
->validation_pattern($field, $pattern) exige que el valor (no vacío) de un campo coincida con una expresión regular en el formulario de Añadir/Editar, aplicado tanto en el cliente como en el servidor. $pattern es uno de los atajos con nombre siguientes, o el cuerpo literal de una expresión regular sin delimitadores:
$xcrud->validation_pattern('email', 'email');
| Atajo | Coincide con |
|---|---|
email | Una forma simple usuario@host |
alpha | Solo letras |
alpha_numeric | Letras y dígitos |
alpha_dash | Letras, dígitos, guion bajo, guion |
numeric | Un número entero o decimal, opcionalmente negativo |
natural | Solo dígitos (un entero no negativo) |
url | Una URL http:// o https:// |
Para cualquier otro caso, pasa el cuerpo literal de una expresión regular (sin barras, sin flags):
$xcrud->validation_pattern('sku', '^[A-Z]{2}-\d{4}$');
Un campo vacío pasa una comprobación de patrón por sí solo - combínalo con ->validation_required() para también prohibir dejarlo en blanco. Consulta Validación de campos para la explicación completa de required/pattern.
3. Mostrarlo, pero bloquear la edición
->readonly($field) y ->disabled($field) muestran ambos un campo en el formulario mientras impiden que el visitante lo cambie - la diferencia es puramente cosmética (un input con estilo readonly frente a un control deshabilitado en gris). Ninguno es un control de seguridad del lado del servidor: solo cambian lo que el navegador permite hacer clic a un visitante, no lo que acepta la API.
$xcrud->readonly('accountNumber');
Un visitante que llame a la API REST directamente, saltándose el formulario por completo, no queda detenido por readonly()/disabled() en absoluto. El verdadero límite de seguridad es poner en lista blanca qué columnas son editables desde el principio - consulta Seguridad: listas negras de tablas y columnas.
Uniéndolo todo
$xcrud = Xcrud::get_instance();
$xcrud->table('customers');
$xcrud->route('customers');
$xcrud->change_type('email', 'text');
$xcrud->validation_pattern('email', 'email');
$xcrud->readonly('accountNumber');
$xcrud->render();