El método form() hace exactamente eso, pero con campos de formulario. Tú decides: «El nombre va primero, después el precio, luego la descripción». Estás organizando el formulario para que el usuario entienda qué llenar. ¡Eres el arquitecto de tu propio formulario!
¿Qué es exactamente form()?
Es el método que le dice a Filament: «Cuando alguien quiera crear o editar un producto, muéstrale ESTOS campos, en ESTE orden, con ESTAS reglas». Sin este método, Filament no sabría qué mostrar.
💡 Lo bonito es que puedes hacer formularios complejos con muy poco código.
Conocer los componentes básicosFíjate bien, porque esto es clave: cada campo es un «componente». Tienes
TextInput para texto corto, Textarea para texto largo, Toggle para sí/no, DatePicker para fechas… Cada uno es como una pieza de LEGO que puedes conectar.
Ver el código que vamos a escribirAquí está el truco: vas a encadenar métodos. Primero creas el campo, luego le dices «eres obligatorio», luego «máximo 255 caracteres», luego «agrega un símbolo $»… Todo en una sola línea fluida.
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: app/Filament/Resources/Productos/Schemas/ProductoForm.php
TextInput::make('nombre')->required()->maxLength(255),
TextInput::make('precio')->numeric()->prefix('$'),
Toggle::make('activo');
🔍 Vamos a entender línea por línea:
TextInput::make('nombre') → Creas un campo de texto vinculado a la columna «nombre» de tu tabla. Es como decir «aquí va el nombre del producto».->required() → Este campo es obligatorio. Si el usuario intenta guardar sin llenarlo, Filament le dice «Oye, falta el nombre».->maxLength(255) → Máximo 255 caracteres. Si alguien intenta escribir una novela, Filament lo corta.TextInput::make('precio') → Otro campo de texto, pero este es para el precio.->numeric() → Solo acepta números. Si alguien escribe «gratis», Filament le dice que no puede.->prefix('$') → Agrega un símbolo $ antes del campo. El usuario ve «$ 999» en lugar de solo «999».Toggle::make('activo') → Un interruptor de encendido/apagado. Para cosas como «¿Está activo este producto?». El usuario ve un switch, no un campo de texto.📊 Así se ve cada componente:
| Componente | Lo que ve el usuario |
|---|---|
TextInput::make('nombre') |
Campo de texto normal |
TextInput::make('precio')->prefix('$') |
$ _______ |
Textarea::make('descripcion') |
Área de texto grande |
Toggle::make('activo') |
Interruptor ON/OFF |
¿Dónde va este código?Cuando creas un resource, Filament genera un archivo separado para el formulario. Se llama
ProductoForm.php y está en la carpeta Schemas. Es como si el formulario tuviera su propia casita, separado del resto del código.
📁 ¿Quieres ver el código completo del archivo? (opcional)
Esto es solo para que veas cómo se ve todo junto:
📍 Archivo: app/Filament/Resources/Productos/Schemas/ProductoForm.php
<?php
namespace App\Filament\Resources\Productos\Schemas;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\Toggle;
use Filament\Schemas\Schema;
class ProductoForm
{
public static function configure(Schema $schema): Schema
{
return $schema->components([
TextInput::make('nombre')
->required()
->maxLength(255),
Textarea::make('descripcion')
->columnSpanFull(),
TextInput::make('precio')
->required()
->numeric()
->prefix('$'),
TextInput::make('stock')
->numeric()
->default(0),
Toggle::make('activo'),
]);
}
}
¡Pruébalo!Guarda los cambios, ve a tu panel de administración, haz clic en «Productos» y luego en «Crear». ¿Ves los campos que definiste? ¿El precio tiene el símbolo $? ¿El toggle funciona? ¡Eso significa que lo lograste!
🎉 ¿Qué aprendimos hoy?
form()es donde diseñas tu formulario: qué campos, en qué orden, con qué reglas- Los componentes son piezas de LEGO:
TextInput,Textarea,Toggle, etc. - Encadenas métodos para personalizar:
->required(),->maxLength(255),->prefix('$') - El formulario vive en su propio archivo para mantener todo organizado
- Eres el arquitecto: tú decides cómo se ve y funciona todo
En la siguiente lección vamos a ver el método table(), que es donde defines cómo se ve el listado de productos. ¡Es como diseñar una hoja de Excel con superpoderes! Nos vemos allí. 🚀