/

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ètreTypeDéfautDescription
$watchFieldstring-Champ dont la valeur en direct pilote la condition
$operatorstring-Symbole (=, !=, >, >=, <, <=) ou code (eq, neq, gt, gte, lt, lte, contains, starts, ends)
$valuestring-Valeur comparée à $watchField
$targetFieldstring-Champ auquel l'effet est appliqué
$effectstring-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ètreTypeDéfautDescription
$fieldsstring|array-Champ(s) auxquels l'action s'applique
$conditionstring-Comparaison simple ou expression {{sql}}
$actionstring'hide''hide' (vue LISTE) ou 'disable' (formulaire d'édition)
$content?stringnullUtilisé 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.