Logique conditionnelle d'affichage/masquage/désactivation
Quatre méthodes apparentées réagissent à la valeur d'un champ - deux sont une UX côté client réservée au formulaire, deux sont au niveau de la grille et appliquées côté serveur.
condition() - UX de formulaire en direct
->condition($watchField, $operator, $value, $targetField, $effect) affiche, masque, active ou désactive $targetField en fonction de la valeur ACTUELLE de $watchField dans le FORMULAIRE OUVERT, revérifiée en direct au fur et à mesure que le visiteur saisit/sélectionne.
$xcrud->condition('status', 'eq', 'inactive', 'reason', 'show');
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
$watchField | string | - | Champ dont la valeur en direct pilote la condition |
$operator | string | - | Symbole (=, !=, >, >=, <, <=) ou code (eq, neq, gt, gte, lt, lte, contains, starts, ends) |
$value | string | - | Valeur comparée à $watchField |
$targetField | string | - | Champ auquel l'effet est appliqué |
$effect | string | - | show, hide, enable, ou disable |
Purement une commodité UX côté client : l'API n'a aucune idée que ces règles existent, donc un champ cible désactivé/masqué n'est en rien protégé contre une soumission par un autre moyen.
disable_logic() - évalué côté serveur, formulaire d'édition uniquement
->disable_logic($fields, $condition) désactive un ou plusieurs champs dans le formulaire D'ÉDITION chaque fois que $condition s'évalue à vrai pour la ligne en cours d'édition. $condition est soit une simple comparaison "field OP value" évaluée en PHP, soit un fragment SQL brut {{...}} pour tout ce qu'une simple comparaison ne peut pas exprimer.
$xcrud->disable_logic('total', 'total>1000');
$xcrud->disable_logic(['total', 'checkNo'], '{{IN (SELECT amount FROM payments LIMIT 1)}}');
Ne s'applique jamais à un tout nouvel enregistrement (le formulaire d'ajout) - il n'y a pas encore de ligne contre laquelle évaluer une condition.
hide_logic() - évalué côté serveur, vue LISTE uniquement
->hide_logic($fields, $condition) utilise la même grammaire de condition que disable_logic(), mais pour la vue LISTE : chaque fois que $condition s'évalue à vrai pour une ligne, la valeur de $fields pour cette ligne est purement et simplement vidée (null) avant même que la réponse ne soit construite. C'est un véritable masquage côté serveur - rien de sensible ne transite dans le JSON pour qu'un visiteur puisse le lire depuis les outils de développement, contrairement à une valeur simplement stylée/masquée côté client.
$xcrud->hide_logic('total', '{{IN (SELECT amount FROM payments LIMIT 1)}}');
logic() - le superset unifié
->logic($fields, $condition, $action = 'hide', $content = null) est un unique point d'entrée plus général au-dessus de disable_logic()/hide_logic(), choisissant le comportement applicable via $action. Contrairement à un simple vidage par hide_logic(), 'hide' peut substituer un contenu HTML personnalisé à la place de la cellule vidée.
$xcrud->logic('paymentDate', 'amount>50000', 'hide', '<span class="text-red-600 font-bold">High Value</span>');
$xcrud->logic('checkNumber', 'amount>50000', 'disable');
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
$fields | string|array | - | Champ(s) auxquels l'action s'applique |
$condition | string | - | Comparaison simple ou expression {{sql}} |
$action | string | 'hide' | 'hide' (vue LISTE) ou 'disable' (formulaire d'édition) |
$content | ?string | null | Utilisé uniquement par 'hide' : HTML affiché à la place d'une cellule vide |
La distinction essentielle
condition() est réservé au formulaire, une UX côté client - elle change ce qui est visible/activé dans le formulaire ouvert pour une meilleure expérience, mais n'impose rien. hide_logic()/logic('hide', ...) concernent la vue LISTE et sont véritablement appliqués côté serveur - la valeur n'atteint jamais le client lorsque la condition correspond. Utilisez condition() pour guider la saisie ; utilisez hide_logic()/logic() lorsqu'une valeur ne doit véritablement pas quitter le serveur pour certaines lignes.