email() hace lo mismo. Verifica que lo que escribió el usuario tenga formato de email: algo@algo.com. Si escribe «juan» o «juan@», Filament le dice: «Eso no parece un email válido».
¿Por qué validar emails?
Porque si guardas «pepe» como email, nunca podrás enviarle correos. Tu sistema de notificaciones fallará. Mejor asegurarte desde el formulario que el email es válido.
💡 La validación NO verifica si el email existe realmente, solo que tiene el formato correcto.
El código es una sola palabra
Solo agregas ->email() al campo y Filament hace todo.
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: app/Filament/Resources/Clientes/Schemas/ClienteForm.php
TextInput::make('email')
->email()
->required()
🔍 Vamos a entender línea por línea:
TextInput::make('email') → Un campo de texto para el email.
->email() → Esta es la magia. Le dice a Filament: «Verifica que lo que escriban tenga formato de email». Acepta cosas como «juan@gmail.com» pero rechaza «juan» o «juan@».
->required() → Es obligatorio. Sin esto, el usuario podría dejarlo vacío.
📊 ¿Qué acepta y qué rechaza email()?
| Lo que escribe | ¿Lo acepta? |
|---|---|
| juan@gmail.com | ✅ Sí |
| maria.perez@empresa.co.uk | ✅ Sí |
| juan | ❌ No |
| juan@ | ❌ No |
| @gmail.com | ❌ No |
¿Qué más hace email()?
Además de validar, cambia el teclado en móviles. En un celular, cuando el usuario toca el campo, el teclado muestra la tecla «@» y el punto «.» más accesibles. Es un detalle pequeño pero mejora la experiencia.
Verificar que el email sea único
Si quieres que no haya dos usuarios con el mismo email (muy común), agrega unique():
TextInput::make('email')
->email()
->required()
->unique(ignoreRecord: true)
💡 ignoreRecord: true significa: «Cuando edites un cliente, ignora su propio email». Sin esto, no podrías guardar cambios porque detectaría que «ya existe» ese email (¡es el mismo cliente!).
📁 ¿Quieres ver el código completo? (opcional)
Un formulario típico con email:
return $schema->components([
TextInput::make('nombre')
->required()
->maxLength(255),
TextInput::make('email')
->email()
->required()
->unique(ignoreRecord: true),
TextInput::make('telefono')
->tel(),
]);
🎉 ¿Qué aprendimos hoy?
->email()valida que el texto tenga formato de email- Acepta «algo@algo.com», rechaza textos sin formato
- Cambia el teclado en móviles para escribir emails más fácil
- Combínalo con
unique()para evitar duplicados - NO verifica si el email existe realmente, solo el formato
En la siguiente lección vamos a personalizar la etiqueta del campo con label(). ¡Nos vemos! 🚀