hidden() hace exactamente eso: crea un campo que NO se ve en el formulario, pero que SÍ tiene un valor y se guarda. Es como un campo fantasma.
¿Cuándo usar hidden?
Cuando necesitas guardar un valor que el usuario no debe ver ni modificar. Por ejemplo: el ID del usuario que creó el registro, un token de seguridad, un valor calculado internamente.
💡 Es diferente de disabled: disabled se VE pero no se toca. hidden NO se ve.
El código para ocultar el campo
Solo agregas ->hidden() y el campo desaparece del formulario.
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: app/Filament/Resources/Pedidos/Schemas/PedidoForm.php
TextInput::make('user_id')
->default(auth()->id())
->hidden()
🔍 Vamos a entender línea por línea:
TextInput::make('user_id') → Un campo para guardar el ID del usuario.
->default(auth()->id()) → El valor por defecto es el ID del usuario actualmente logueado. ¡Automático!
->hidden() → El campo es invisible. El usuario no lo ve, pero el valor SÍ se guarda en la base de datos.
📊 Diferencia entre hidden, disabled y visible:
| Método | ¿Se ve? | ¿Se guarda? |
|---|---|---|
| visible() (normal) | ✅ Sí | ✅ Sí |
| disabled() | ✅ Sí (gris) | ❌ No (sin dehydrated) |
| hidden() | ❌ No | ✅ Sí |
Ejemplos prácticos
// Guardar quién creó el registro
TextInput::make('created_by')
->default(auth()->id())
->hidden()
// Guardar la fecha automáticamente
TextInput::make('fecha_creacion')
->default(now())
->hidden()
// Token de seguridad
TextInput::make('token')
->default(str()->random(32))
->hidden()
Hidden condicional
A veces quieres que el campo esté oculto solo en ciertos casos. Para eso usas hiddenOn('create') o hiddenOn('edit') que veremos en las siguientes lecciones.
📁 ¿Quieres ver un ejemplo completo? (opcional)
Un formulario con campos ocultos:
return $schema->components([
// Campos visibles
TextInput::make('titulo')
->required(),
Textarea::make('contenido')
->required(),
// Campos ocultos (el usuario no los ve pero se guardan)
TextInput::make('user_id')
->default(auth()->id())
->hidden(),
TextInput::make('ip_address')
->default(request()->ip())
->hidden(),
TextInput::make('slug')
->default(fn () => str()->slug(request('titulo')))
->hidden(),
]);
🎉 ¿Qué aprendimos hoy?
->hidden()hace el campo invisible- El usuario NO lo ve, pero el valor SÍ se guarda
- Útil para IDs de usuario, tokens, valores automáticos
- Diferente de disabled: disabled se ve, hidden no
- Combínalo con default() para valores automáticos
En la siguiente lección vamos a ver visible() para mostrar campos condicionalmente. ¡Nos vemos! 🚀