
3. Cómo hacer un campo obligatorio en Filament 5: validación automática sin esfuerzo
Ayer agregaste tu primer campo de texto y viste cómo Filament lo transformó en un input profesional. Hoy vamos a darle inteligencia a ese campo. Aprenderás a hacer que el nombre sea obligatorio, para que nadie pueda crear un cliente sin nombre. Lo mejor: Filament valida automáticamente, muestra el mensaje de error y bloquea el guardado. Tú solo agregas una palabra mágica.
🎯 Objetivo de hoy
Hacer que el campo name sea obligatorio usando ->required().
🖥️ Antes / Después
Antes: Puedes dejar el campo «Name» vacío y Filament guarda un cliente sin nombre.
Después: Si intentas guardar sin escribir el nombre, Filament te detiene con un mensaje rojo: «The name field is required.»
📁 Estructura de carpetas (mapa de hoy)
app/Filament/Resources/
└── Customers/ ⚪ Carpeta del Resource
├── CustomerResource.php ⚪ No lo tocamos hoy
└── Pages/ ⚪ No lo tocamos hoy
| ├── CreateCustomer.php ⚪ No lo tocamos hoy
| ├── EditCustomer.php ⚪ No lo tocamos hoy
| └── ListCustomers.php ⚪ No lo tocamos hoy
├── Schemas/
| └── CustomerForm.php 🟡 🎯 AQUÍ TRABAJAMOS HOY
└── Tables/
└── CustomersTable.php ⚪ No lo tocamos hoy
Hoy modificamos solo el archivo marcado con 🟡. Los demás archivos existen pero no los tocaremos.
📋 Paso 1: Tu código de ayer
Este es el código que tienes actualmente en tu formulario.
📄 Ruta: app/Filament/Resources/Customers/Schemas/CustomerForm.php
<?php
namespace App\Filament\Resources\Customers\Schemas;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class CustomerForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
TextInput::make('name'),
]);
}
}
Fíjate en la línea TextInput::make('name'). Hoy le agregaremos una cadena mágica al final.
➕ Paso 2: Tu ladrillo de hoy (una sola palabra nueva)
📄 Ruta: app/Filament/Resources/Customers/Schemas/CustomerForm.php
// 🔧 Implementamos: validación para que el nombre sea obligatorio
TextInput::make('name')
->required(),
La palabra required() le dice a Filament: «No dejes guardar si este campo está vacío». Filament se encarga del mensaje de error, el color rojo y bloquear el botón Create.
✅ Paso 3: Código completo con tu ladrillo
📄 Archivo del formulario actualizado
Ruta completa: app/Filament/Resources/Customers/Schemas/CustomerForm.php
<?php
namespace App\Filament\Resources\Customers\Schemas;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class CustomerForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
// ✅ Implementado: validación para que el nombre sea obligatorio
TextInput::make('name')
->required(),
]);
}
}
¿Viste el cambio? Solo agregamos ->required() después del paréntesis. La coma al final es importante para que PHP no se confunda.
🎉 Verifica tu magia
Abre tu navegador y sigue estos pasos:
- Ve a
http://tuproyecto.test/admin/customers - Haz clic en «New customer»
- Deja el campo «Name» vacío (no escribas nada)
- Haz clic en «Create»
- ¡Filament te detiene! Verás un mensaje rojo debajo del campo: «The name field is required.»
- Ahora escribe «María García» y guarda
- Debería guardar sin problemas
Si la validación no funciona, revisa que:
- Guardaste el archivo después de agregar
->required() - Pusiste la coma
,al final de la línea - No hay errores de sintaxis (paréntesis balanceados)
¿Lo ves? ¡Filament validó por ti! Sin escribir reglas complicadas, sin mensajes personalizados, todo funciona automáticamente.
💬 ¿Viste cómo Filament te protegió de guardar datos vacíos? Con solo una palabra, tu formulario ahora es inteligente. Mañana aprenderemos a validar que el email tenga formato correcto, para que nadie escriba «correo-invalido». ¿Te animas a seguir construyendo?
📖 Fuente oficial: Documentación de Filament 5 — Validation
➡️ Próximo paso: Mañana agregaremos un campo email y validaremos que tenga formato correcto con ->email(). Verás cómo Filament detecta automáticamente si falta la arroba o el punto.