Logica condizionale mostra/nascondi/disabilita
Quattro metodi correlati reagiscono al valore di un campo - due sono UX lato client solo per il form, due sono a livello di griglia e applicati dal server.
condition() - UX live del form
->condition($watchField, $operator, $value, $targetField, $effect) mostra, nasconde, abilita o disabilita $targetField in base al valore CORRENTE di $watchField nel FORM APERTO, riverificato dal vivo mentre il visitatore digita/seleziona.
$xcrud->condition('status', 'eq', 'inactive', 'reason', 'show');
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
$watchField | string | - | Campo il cui valore live guida la condizione |
$operator | string | - | Simbolo (=, !=, >, >=, <, <=) o codice (eq, neq, gt, gte, lt, lte, contains, starts, ends) |
$value | string | - | Valore confrontato con $watchField |
$targetField | string | - | Campo a cui viene applicato l'effetto |
$effect | string | - | show, hide, enable, o disable |
Puramente una comodità UX lato client: l'API non ha alcuna idea che queste regole esistano, quindi un campo target disabilitato/nascosto non è per questo protetto dall'essere inviato in qualche altro modo.
disable_logic() - valutato dal server, solo form di modifica
->disable_logic($fields, $condition) disabilita uno o più campi nel form di MODIFICA ogni volta che $condition viene valutata vera rispetto alla riga attualmente in modifica. $condition è un semplice confronto "campo OP valore" valutato in PHP, oppure un frammento SQL grezzo {{...}} per qualsiasi cosa un confronto semplice non possa esprimere.
$xcrud->disable_logic('total', 'total>1000');
$xcrud->disable_logic(['total', 'checkNo'], '{{IN (SELECT amount FROM payments LIMIT 1)}}');
Non si applica mai a un record del tutto nuovo (il form Aggiungi) - non esiste ancora una riga rispetto a cui valutare una condizione.
hide_logic() - valutato dal server, solo vista LISTA
->hide_logic($fields, $condition) usa la stessa grammatica di condizione di disable_logic(), ma per la vista LISTA: ogni volta che $condition viene valutata vera per una riga, il valore di quella riga per $fields viene azzerato del tutto (null) prima che la risposta venga mai costruita. Si tratta di un vero nascondimento server-side - nulla di sensibile viaggia nel JSON perché un visitatore lo legga dalle devtools, a differenza di un valore semplicemente stilizzato/nascosto lato client.
$xcrud->hide_logic('total', '{{IN (SELECT amount FROM payments LIMIT 1)}}');
logic() - il superset unificato
->logic($fields, $condition, $action = 'hide', $content = null) è un unico punto di ingresso più generale su disable_logic()/hide_logic(), che sceglie quale comportamento applicare tramite $action. A differenza di un semplice azzeramento di hide_logic(), 'hide' può sostituire la cella azzerata con contenuto HTML personalizzato.
$xcrud->logic('paymentDate', 'amount>50000', 'hide', '<span class="text-red-600 font-bold">High Value</span>');
$xcrud->logic('checkNumber', 'amount>50000', 'disable');
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
$fields | string|array | - | Campo/i a cui si applica l'azione |
$condition | string | - | Confronto semplice o un'espressione {{sql}} |
$action | string | 'hide' | 'hide' (vista LISTA) o 'disable' (form di modifica) |
$content | ?string | null | Usato solo da 'hide': HTML mostrato al posto di una cella vuota |
La distinzione chiave
condition() è UX solo per il form, lato client - cambia cosa è visibile/abilitato nel form aperto per un'esperienza più gradevole, ma non applica nulla. hide_logic()/logic('hide', ...) sono a livello di vista LISTA e realmente applicati dal server - il valore non raggiunge affatto il client quando la condizione corrisponde. Usa condition() per guidare l'inserimento dati; usa hide_logic()/logic() quando un valore deve davvero non lasciare il server per alcune righe.