/

Inicio rápido: tu primera página CRUD

Una cuadrícula funcional de añadir/editar/eliminar en tres líneas de PHP - sin HTML, sin maquetación, sin cableado manual.

La página completa

Crea pages/payments.php con solo esto:

$xcrud = Xcrud::get_instance();
$xcrud->table('payments');
$xcrud->route('payments');

Visita /payments y ya tienes una pantalla CRUD completa: listar, buscar, ordenar, añadir, editar, eliminar. El archivo nunca llama a render() ni imprime nada por sí mismo: core/router.php detecta que la página no produjo ninguna salida propia, así que llama a render() por ti y envuelve el resultado en la estructura normal del sitio (o la estructura del panel principal, si el inicio de sesión/roles están activados). Ese envoltorio automático solo ocurre cuando la página es silenciosa - en cuanto una página emite su propio HTML (como una página sin widgets o con varios), el router la deja tal cual. Consulta Varios widgets en una misma página para ese caso.

get_instance()

Xcrud::get_instance() devuelve una instancia de widget nueva e independiente - a pesar del nombre, no es un verdadero singleton. Cada llamada devuelve un objeto completamente nuevo con su propia tabla, columnas, campos y hooks. Varios widgets pueden convivir sin problemas en una misma página, cada uno con su propia llamada a get_instance():

$customers = Xcrud::get_instance();
$customers->table('customers');
$customers->route('customers');

$orders = Xcrud::get_instance();
$orders->table('orders');
$orders->route('orders');

table()

$xcrud->table(string $name) vincula el widget a una tabla real de la base de datos. El nombre se verifica contra el esquema de tu propia base de datos (debe existir y tener una clave primaria de una sola columna) y contra XcrudConfig::$blacklistedTables - una lista negra de seguridad en src/Config.php. Toda tabla es accesible por defecto; una tabla solo deja de poder usarse cuando se añade explícitamente a esa lista. Llamar a table() con una tabla en la lista negra o inexistente lanza una excepción de inmediato. Consulta Seguridad: listas negras de tablas y columnas para el modelo completo, incluido el bloqueo a nivel de columna.

ParámetroTipoPor defectoDescripción
$namestring-Nombre real de la tabla en la base de datos conectada. No debe estar en $blacklistedTables, debe existir y debe tener una clave primaria de una sola columna.

route()

$xcrud->route(string $name) establece el slug de URL al que responde el widget - es la forma en que core/router.php hace corresponder una petición como /payments con esta instancia de widget exacta, y también es la clave que ajax_crud.php usa para volver a resolver la configuración de esa misma página (columnas, hooks, botones) en cada petición AJAX. Con solo llamar a table() ya se establece una ruta por defecto que coincide con el nombre de la tabla, así que route() solo es necesaria cuando quieres que la URL sea distinta del nombre de la tabla.

render() vs page()

Una vez configurado, un widget produce su marcado de una de estas dos formas:

MétodoDevuelveCuándo usarlo
render()Solo el HTML propio del widget (punto de montaje + recursos + script de inicialización)Incrustarlo en una página que ya estás escribiendo tú mismo - junto a otros widgets, HTML personalizado o un frontend desacoplado
page()Un documento HTML independiente y completo (doctype, head, title, body) que envuelve render()Una ruta que no es más que esta única cuadrícula - a lo que recurre el router para una página silenciosa como la del ejemplo anterior
$xcrud = Xcrud::get_instance();
$xcrud->table('payments');
$xcrud->route('payments');
echo $xcrud->page(); // documento <html>...</html> completo

Rara vez necesitas llamar explícitamente a uno u otro para una página de un solo widget - dejar la página en silencio (como en el ejemplo de tres líneas anterior) permite que el router llame a render() por ti y se encargue de la estructura que la rodea.