/

Démarrage rapide : votre première page CRUD

Une grille d'ajout/édition/suppression fonctionnelle en trois lignes de PHP - pas de HTML, pas de mise en page, pas de câblage.

La page entière

Créez pages/payments.php avec juste ceci :

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

Visitez /payments et voilà un écran CRUD complet - liste, recherche, tri, ajout, édition, suppression. Le fichier n'appelle jamais render() et n'affiche rien lui-même : core/router.php remarque que la page n'a produit aucune sortie propre, il appelle donc render() à votre place et enveloppe le résultat dans la coquille de page normale du site (ou la coquille du tableau de bord, si connexion/rôles sont activés). Cette enveloppe automatique ne se produit que lorsque la page reste silencieuse - dès qu'une page affiche son propre HTML (comme une page sans widget ou avec plusieurs widgets), le routeur la laisse tranquille. Voyez Plusieurs widgets sur une même page pour ce cas.

get_instance()

Xcrud::get_instance() renvoie une instance de widget nouvelle et indépendante - malgré son nom, ce n'est pas un véritable singleton. Chaque appel renvoie un tout nouvel objet avec sa propre table, ses propres colonnes, champs et hooks. Plusieurs widgets peuvent coexister sans problème sur une même page, chacun issu de son propre appel à 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) lie le widget à une véritable table de base de données. Le nom est vérifié par rapport au schéma de votre base de données (elle doit exister et avoir une clé primaire à une seule colonne) et par rapport à XcrudConfig::$blacklistedTables - une liste noire de sécurité dans src/Config.php. Chaque table est accessible par défaut ; une table ne devient inutilisable qu'une fois explicitement ajoutée à cette liste. Appeler table() sur une table sur liste noire ou inexistante lève immédiatement une exception. Voyez Sécurité : liste noire des tables & colonnes pour le modèle complet, y compris le blocage au niveau des colonnes.

ParamètreTypeDéfautDescription
$namestring-Nom de table réel dans la base de données connectée. Ne doit pas figurer dans $blacklistedTables, doit exister, et doit avoir une clé primaire à une seule colonne.

route()

$xcrud->route(string $name) définit le slug d'URL auquel le widget répond - c'est ainsi que core/router.php fait correspondre une requête comme /payments à cette instance de widget précise, et c'est aussi la clé que ajax_crud.php utilise pour re-résoudre la configuration de cette même page (colonnes, hooks, boutons) à chaque requête AJAX. Appeler table() seul définit déjà une route par défaut correspondant au nom de la table, donc route() n'est nécessaire que lorsque vous voulez que l'URL diffère du nom de la table.

render() vs page()

Une fois configuré, un widget produit son balisage de l'une des deux façons suivantes :

MéthodeRenvoieQuand l'utiliser
render()Uniquement le HTML propre du widget (point de montage + assets + script d'initialisation)Intégration dans une page que vous écrivez déjà vous-même - aux côtés d'autres widgets, de HTML personnalisé, ou d'un frontend découplé
page()Un document HTML autonome complet (doctype, head, title, body) enveloppant render()Une route qui n'est rien d'autre que cette seule grille - ce vers quoi le routeur se rabat pour une page silencieuse comme celle ci-dessus
$xcrud = Xcrud::get_instance();
$xcrud->table('payments');
$xcrud->route('payments');
echo $xcrud->page(); // document <html>...</html> complet

Vous avez rarement besoin d'appeler l'une ou l'autre explicitement pour une page à widget unique - laisser la page silencieuse (comme dans l'exemple en trois lignes ci-dessus) permet au routeur d'appeler render() à votre place et de gérer la coquille environnante.