/

Lógica condicional de mostrar/ocultar/deshabilitar

Cuatro métodos relacionados reaccionan al valor de un campo - dos son experiencia de usuario del lado del cliente solo en el formulario, dos son a nivel de cuadrícula y se aplican en el servidor.

condition() - experiencia de formulario en vivo

->condition($watchField, $operator, $value, $targetField, $effect) muestra, oculta, habilita o deshabilita $targetField según el valor ACTUAL de $watchField en el FORMULARIO ABIERTO, reevaluado en vivo mientras el visitante escribe/selecciona.

$xcrud->condition('status', 'eq', 'inactive', 'reason', 'show');
ParámetroTipoPor defectoDescripción
$watchFieldstring-Campo cuyo valor en vivo controla la condición
$operatorstring-Símbolo (=, !=, >, >=, <, <=) o código (eq, neq, gt, gte, lt, lte, contains, starts, ends)
$valuestring-Valor comparado contra $watchField
$targetFieldstring-Campo al que se aplica el efecto
$effectstring-show, hide, enable, o disable

Es puramente una comodidad de experiencia de usuario del lado del cliente: la API no tiene idea de que existen estas reglas, así que un campo destino deshabilitado/oculto no queda por ello protegido de ser enviado por otra vía.

disable_logic() - evaluado en el servidor, solo formulario de edición

->disable_logic($fields, $condition) deshabilita campo(s) en el formulario de EDICIÓN siempre que $condition se evalúe como verdadera contra la fila que se está editando en ese momento. $condition es o bien una comparación simple "campo OP valor" evaluada en PHP, o un fragmento SQL sin procesar {{...}} para cualquier cosa que una comparación simple no pueda expresar.

$xcrud->disable_logic('total', 'total>1000');
$xcrud->disable_logic(['total', 'checkNo'], '{{IN (SELECT amount FROM payments LIMIT 1)}}');

Nunca se aplica a un registro completamente nuevo (el formulario de Añadir) - todavía no hay fila contra la que evaluar una condición.

hide_logic() - evaluado en el servidor, solo vista de LISTA

->hide_logic($fields, $condition) usa la misma gramática de condiciones que disable_logic(), pero para la vista de LISTA: siempre que $condition se evalúe como verdadera para una fila, el valor de esa fila para $fields se deja en blanco por completo (null) antes de que se construya la respuesta. Esto es un ocultamiento real, del lado del servidor - nada sensible viaja en el JSON para que un visitante lo lea desde devtools, a diferencia de un valor que simplemente se estiliza/oculta del lado del cliente.

$xcrud->hide_logic('total', '{{IN (SELECT amount FROM payments LIMIT 1)}}');

logic() - el superconjunto unificado

->logic($fields, $condition, $action = 'hide', $content = null) es un único punto de entrada más general sobre disable_logic()/hide_logic(), eligiendo qué comportamiento aplicar mediante $action. A diferencia de un simple hide_logic() en blanco, 'hide' puede sustituir contenido HTML personalizado en lugar de la celda dejada en blanco.

$xcrud->logic('paymentDate', 'amount>50000', 'hide', '<span class="text-red-600 font-bold">High Value</span>');
$xcrud->logic('checkNumber', 'amount>50000', 'disable');
ParámetroTipoPor defectoDescripción
$fieldsstring|array-Campo(s) a los que se aplica la acción
$conditionstring-Comparación simple o una expresión {{sql}}
$actionstring'hide''hide' (vista de LISTA) o 'disable' (formulario de edición)
$content?stringnullSolo usado por 'hide': HTML mostrado en lugar de una celda en blanco

La distinción clave

condition() es experiencia de usuario del lado del cliente solo en el formulario - cambia lo que es visible/está habilitado en el formulario abierto para una experiencia más agradable, pero no impone nada. hide_logic()/logic('hide', ...) son de la vista de LISTA y genuinamente se aplican en el servidor - el valor nunca llega al cliente cuando la condición coincide. Recurre a condition() para guiar la entrada de datos; recurre a hide_logic()/logic() cuando un valor realmente no debe salir del servidor para ciertas filas.