Es perfecto para cosas como pedidos (no quieres que alguien cambie el total por accidente), facturas, o cualquier dato que quieras mostrar sin riesgo de modificación.
¿Por qué necesitas una página de vista?
Mira, por defecto Filament te da tres páginas: lista, crear y editar. Pero a veces quieres una cuarta: VER sin editar. Por ejemplo, un pedido completado. Quieres ver qué se compró, cuánto costó, quién lo ordenó… pero NO quieres que nadie pueda cambiar esos datos.
💡 Es como una vitrina: puedes ver todo, pero no puedes tocar.
El comando que crea la página
Es súper simple. Solo agrega --view al comando que ya conoces:
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: terminal (línea de comandos)
php artisan make:filament-resource Pedido --view
🔍 ¿Qué hace esta línea?
php artisan make:filament-resource Pedido → El comando normal para crear un resource de pedidos.
--view → Le dice a Filament: «Agrega una página extra para ver detalles sin editar». Crea el archivo ViewPedido.php y PedidoInfolist.php.
La pregunta clave
Cuando ejecutes el comando, Filament te preguntará:
- «Would you like a read-only view page?» → Escribe:
yes← ¡ESTO es lo que activa la página de vista!
¿Qué archivos se crean?
Ahora tienes 4 páginas en lugar de 3:
app/Filament/Resources/Pedidos/
├── Pages/
│ ├── ListPedidos.php ← Lista de pedidos
│ ├── CreatePedido.php ← Crear nuevo
│ ├── ViewPedido.php ← 👀 VER (nueva)
│ └── EditPedido.php ← Editar
├── Schemas/
│ ├── PedidoForm.php ← Formulario
│ └── PedidoInfolist.php ← 👀 Configuración de la vista (nuevo)
└── Tables/
└── PedidosTable.php
El archivo importante: PedidoInfolist.php
Este archivo define cómo se ve la página de vista. Es como el formulario, pero todo es de solo lectura. En lugar de TextInput, usas TextEntry. En lugar de campos editables, tienes texto estático.
📁 ¿Quieres ver cómo se configura la vista? (opcional)
Fíjate que usas TextEntry en lugar de TextInput:
📍 Archivo: app/Filament/Resources/Pedidos/Schemas/PedidoInfolist.php
return $schema->components([
Section::make('Información del Pedido')
->columns(2)
->components([
TextEntry::make('numero_pedido')->label('Número'),
TextEntry::make('cliente.nombre')->label('Cliente'),
TextEntry::make('total')->money('USD'),
TextEntry::make('estado')->badge()->color(fn ($state) => match ($state) {
'pendiente' => 'warning',
'enviado' => 'success',
'cancelado' => 'danger',
}),
]),
]);
Cómo acceder a la página de vista
Para que los usuarios puedan entrar a la página de vista, necesitas agregar un botón en la tabla. Es un icono de «ojo»:
// En PedidosTable.php
->recordActions([
ViewAction::make(), // 👁️ Ver detalles
EditAction::make(), // ✏️ Editar
])
📊 Componentes de infolist vs formulario:
| Formulario (editar) | Infolist (ver) |
|---|---|
TextInput |
TextEntry |
Textarea |
TextEntry |
Toggle |
IconEntry |
DatePicker |
TextEntry con dateTime() |
¿Cuándo usar –view?
- ✅ Pedidos completados: Quieres ver el historial sin riesgo de cambios
- ✅ Facturas: Datos que no se deben modificar
- ✅ Perfiles de usuario: Ver información sin editar
- ✅ Reportes: Mostrar datos calculados o resúmenes
¡Pruébalo!
Crea un resource con --view, ve al listado y fíjate en los iconos de cada fila. Verás un OJO (ver) y un LÁPIZ (editar). Haz clic en el ojo. ¿Ves todos los datos organizados? ¿No hay campos editables? ¡Perfecto!
🎉 ¿Qué aprendimos hoy?
--viewcrea una página de solo lectura para ver detalles- Es como una vitrina: puedes ver todo, pero no puedes tocar
- El archivo
Infolist.phpconfigura cómo se ve la información - Usas
TextEntryen lugar deTextInput - Agregas
ViewAction::make()en la tabla para el botón de «ojo» - Perfecto para pedidos, facturas, y datos que no deben modificarse
En la siguiente lección vamos a ver --model-namespace, que es útil cuando tus modelos están organizados en carpetas personalizadas. ¡Es la última lección del módulo! Nos vemos. 🚀
1 Comentario
Esta leccion es muy importante y de uso frecuente.