/

Avvio rapido: la tua prima pagina CRUD

Una griglia di aggiunta/modifica/eliminazione funzionante in tre righe di PHP - senza HTML, senza layout, senza collegamenti manuali.

L'intera pagina

Crea pages/payments.php con solo questo:

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

Visita /payments e questa è già una schermata CRUD completa - elenco, ricerca, ordinamento, aggiunta, modifica, eliminazione. Il file non chiama mai render() né stampa nulla da sé: core/router.php nota che la pagina non ha prodotto un proprio output, quindi chiama render() per te e avvolge il risultato nel guscio di pagina standard del sito (o nel guscio della dashboard, se login/ruoli sono abilitati). Questo avvolgimento automatico avviene solo quando la pagina è silenziosa - nel momento in cui una pagina stampa il proprio HTML (come una pagina senza widget o con più widget), il router la lascia stare. Vedi Più widget su una singola pagina per questo caso.

get_instance()

Xcrud::get_instance() restituisce un'istanza di widget nuova e indipendente - nonostante il nome, non è un vero singleton. Ogni chiamata restituisce un oggetto completamente nuovo con la propria tabella, colonne, campi e hook. Più widget possono coesistere tranquillamente sulla stessa pagina, ciascuno dalla propria chiamata 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) collega il widget a una tabella reale del database. Il nome viene verificato rispetto allo schema del tuo database (deve esistere e avere una chiave primaria a colonna singola) e rispetto a XcrudConfig::$blacklistedTables - una blacklist di sicurezza in src/Config.php. Ogni tabella è raggiungibile per impostazione predefinita; una tabella diventa inutilizzabile solo quando viene esplicitamente aggiunta a quella lista. Chiamare table() su una tabella in blacklist o inesistente genera immediatamente un'eccezione. Vedi Sicurezza: blacklist di tabelle e colonne per il modello completo, incluso il blocco a livello di colonna.

ParametroTipoPredefinitoDescrizione
$namestring-Nome reale della tabella nel database connesso. Non deve essere in $blacklistedTables, deve esistere e avere una chiave primaria a colonna singola.

route()

$xcrud->route(string $name) imposta lo slug URL a cui il widget risponde - è il modo in cui core/router.php associa una richiesta come /payments a questa esatta istanza del widget, ed è anche la chiave che ajax_crud.php usa per ri-risolvere la configurazione della stessa pagina (colonne, hook, pulsanti) a ogni richiesta AJAX. Chiamare solo table() imposta già una rotta predefinita corrispondente al nome della tabella, quindi route() serve solo quando vuoi che l'URL sia diverso dal nome della tabella.

render() vs page()

Una volta configurato, un widget produce il proprio markup in uno di due modi:

MetodoRestituisceQuando usarlo
render()Solo l'HTML proprio del widget (punto di montaggio + asset + script di inizializzazione)Incorporazione in una pagina che stai già scrivendo tu stesso - insieme ad altri widget, HTML personalizzato, o un frontend disaccoppiato
page()Un documento HTML autonomo completo (doctype, head, title, body) che avvolge render()Una rotta che non è altro che questa griglia - a cui il router ricorre per una pagina silenziosa come quella sopra
$xcrud = Xcrud::get_instance();
$xcrud->table('payments');
$xcrud->route('payments');
echo $xcrud->page(); // documento <html>...</html> completo

Raramente devi chiamare esplicitamente l'uno o l'altro per una pagina a widget singolo - lasciare la pagina silenziosa (come nell'esempio di tre righe sopra) permette al router di chiamare render() per te e gestire il guscio circostante.