visible() hace exactamente eso: muestra u oculta un campo según una condición. Puedes decidir si un campo aparece o no basándote en otros valores del formulario.
¿Cuándo usar visible?
Cuando un campo solo tiene sentido en ciertas situaciones. Por ejemplo: el campo «¿Cuántos hijos tienes?» solo aparece si antes respondiste «¿Tienes hijos? = Sí».
💡 Esto hace tus formularios más limpios y menos abrumadores.
El código con la condición
Agregas ->visible(fn ($get) => condición) donde la condición evalúa otro campo.
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: app/Filament/Resources/Clientes/Schemas/ClienteForm.php
TextInput::make('empresa')
->visible(fn ($get) => $get('tipo') === 'empresa')
🔍 Vamos a entender línea por línea:
TextInput::make('empresa') → Un campo para el nombre de la empresa.
->visible(fn ($get) => ...) → Función que decide si el campo se muestra. El parámetro $get te permite leer valores de otros campos.
$get('tipo') === 'empresa' → Lee el valor del campo «tipo». Si es igual a «empresa», este campo ES visible. Si no, está OCULTO.
📊 Ejemplo completo: formulario de cliente
Campo «tipo»: [persona] [empresa]
Si selecciona «empresa» → aparece campo «Razón social»
Si selecciona «persona» → aparece campo «Nombre completo»
Ejemplo completo con Select
Select::make('tipo')
->options([
'persona' => 'Persona física',
'empresa' => 'Empresa',
])
->default('persona')
->live(), // 👈 Importante: actualiza en tiempo real
TextInput::make('nombre_completo')
->visible(fn ($get) => $get('tipo') === 'persona'),
TextInput::make('razon_social')
->visible(fn ($get) => $get('tipo') === 'empresa'),
💡 ->live() hace que el formulario se actualice inmediatamente cuando cambia el valor, sin necesidad de recargar.
Condiciones más complejas
Puedes combinar condiciones con && (y) u || (o):
// Visible si tipo es empresa Y pais es México
TextInput::make('rfc')
->visible(fn ($get) =>
$get('tipo') === 'empresa' && $get('pais') === 'México'
)
// Visible si tiene_hijos es true
TextInput::make('numero_hijos')
->numeric()
->visible(fn ($get) => $get('tiene_hijos') === true)
📁 ¿Quieres ver un ejemplo completo? (opcional)
Un formulario con visibilidad condicional:
return $schema->components([
Select::make('tipo_cliente')
->options([
'persona' => 'Persona',
'empresa' => 'Empresa',
])
->default('persona')
->live(),
// Solo para personas
TextInput::make('nombre')
->visible(fn ($get) => $get('tipo_cliente') === 'persona'),
TextInput::make('apellido')
->visible(fn ($get) => $get('tipo_cliente') === 'persona'),
// Solo para empresas
TextInput::make('razon_social')
->visible(fn ($get) => $get('tipo_cliente') === 'empresa'),
TextInput::make('rfc')
->visible(fn ($get) => $get('tipo_cliente') === 'empresa'),
// Siempre visible
TextInput::make('email')
->email()
->required(),
]);
🎉 ¿Qué aprendimos hoy?
->visible(fn ($get) => condición)muestra el campo solo si se cumple la condición$get('campo')te permite leer el valor de otro campo- Úsalo con
->live()en el campo que controla la visibilidad - Hace formularios más limpios y contextuales
- Puedes combinar condiciones con && y ||
En la siguiente lección vamos a ver hiddenOn() para ocultar campos en páginas específicas. ¡Nos vemos! 🚀