Cómo hacer un campo de solo lectura según la página
disabledOn() hace exactamente eso: el campo se ve pero no se toca.
¿En qué se diferencia de hiddenOn()?
hiddenOn() OCULTA el campo completamente. disabledOn() lo MUESTRA pero no deja editarlo. Es como ponerle un cristal encima: lo ves pero no lo tocas.
💡 Útil cuando quieres que el usuario vea un valor pero no pueda cambiarlo.
El caso típico: campos que no deberían editarse
Tienes un campo «SKU» (código de producto) que se genera automático al crear. Una vez creado, no debería cambiarse. Lo deshabilitas al editar.
📍 Archivo: app/Filament/Resources/ProductoResource.php
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: app/Filament/Resources/ProductoResource.php
TextInput::make('sku')
->label('Código SKU')
->required()
->disabledOn('edit'),
🔍 Vamos a entender línea por línea (como si fuera la primera vez):
TextInput::make('sku')→ Creamos un campo de texto para el código SKU del producto. SKU es como el DNI de un producto.
->label('Código SKU')→ La etiqueta que verá el usuario encima del campo. «Código SKU» es más amigable que solo «SKU».
->required()→ Es obligatorio. El producto debe tener un SKU.
->disabledOn('edit')→ Aquí está lo bueno: «Deshabilita este campo cuando estemos EDITANDO». Al crear funciona normal, al editar se bloquea.
📊 Cómo se comporta en cada página:
| Página | ¿Se ve? | ¿Se puede editar? | Aspecto visual |
|---|---|---|---|
| Crear (create) | ✅ Sí | ✅ Sí, normal | Blanco, activo |
| Editar (edit) | ✅ Sí | ❌ No, bloqueado | Gris, deshabilitado |
| Ver (view) | ✅ Sí | ❌ No | Gris, deshabilitado |
👆 El usuario ve el SKU al editar, pero no puede cambiarlo por error.
Diferencia clave: disabled vs hidden
// Con disabledOn: el campo se VE pero no se edita
->disabledOn('edit') // El usuario ve el valor
// Con hiddenOn: el campo NO se ve
->hiddenOn('edit') // El usuario ni lo ve
💡 Usa disabledOn cuando el valor es informativo. Usa hiddenOn cuando no tiene sentido mostrarlo.
📁 ¿Quieres ver el código completo del archivo? (opcional)
Esto es solo para que veas dónde va tu código. No necesitas memorizar todo esto:
// app/Filament/Resources/ProductoResource.php
public static function form(Form $form): Form
{
return $form
->schema([
TextInput::make('nombre')
->required(),
TextInput::make('sku')
->label('Código SKU')
->required()
->disabledOn('edit'), // Al crear: editable. Al editar: bloqueado.
TextInput::make('precio')
->numeric()
->required(),
]);
}
🎉 ¿Qué aprendimos hoy?
disabledOn('edit')bloquea el campo al editar- El campo SE VE pero NO SE PUEDE editar
- Es diferente de
hiddenOn()que oculta completamente - Úsalo para proteger campos que no deben modificarse
Ya tienes el control total: ocultar, mostrar, bloquear… ¡tú decides! Vamos con el siguiente tema.