4 min. de lectura (aproximado)

Cómo funciona Laravel filament

(4 min. de lectura) Laravel Filament es un framework open-source muy popular para Laravel que permite crear paneles administrativos, dashboards y aplicaciones completas de forma extremadamente rápida y elegante, sin necesidad de escribir mucho HTML, CSS o JavaScript.

¿Qué es exactamente Filament?

Filament es un Server-Driven UI framework y significa que se define toda la interfaz de usuario completamente en PHP, y Filament se encarga de generar el HTML interactivo y reactivo en el navegador. Está construido sobre el TALL: Stack:
  • Tailwind CSS (diseño moderno y responsive).
  • Alpine.js (interactividad ligera).
  • Livewire (reactividad sin escribir Vue/React).
  • Laravel (el backend).

¿Cómo funciona Filament?

  1. Paneles: Son el contenedor principal. Se pueden tener múltiples paneles en una misma aplicación Laravel, por ejemplo: un panel para administradores /admin, otro para usuarios /app, otro para partners, etc.. Cada panel tiene su propio diseño, middleware, rutas, colores, logo, etc.
  2. Recursos: Es la parte más potente. Un recurso representa un Modelo Eloquent por ejemplo: Post, User, Producto, Pedido. Con un solo comando se genera automáticamente:
    • Tabla para listar registros con filtros, búsqueda, ordenamiento, acciones en masa, etc....
    • Formulario para crear/editar.
    • Página de vista (Infolist).
    • Acciones (delete, custom buttons, etc.).
    Ejemplo de cómo se ve un Resource en código:

    public static function table(Table $table): Table
    {
    return $table
    ->columns([
      TextColumn::make('name')->sortable()->searchable(),
      TextColumn::make('email'),
      ImageColumn::make('photo'),
    ])
    ->filters([...])
    ->actions([EditAction::make()])
    ->bulkActions([DeleteBulkAction::make()]);
    }
    
    public static function form(Form $form): Form
    {
    return $form
    ->schema([
      TextInput::make('name')->required(),
      Select::make('category_id')->relationship('category', 'name'),
      // ...
    ]);
    }
    
  3. Componentes principales:
    • Forms: Campos de todo tipo (text, select, date, file, repeater, builder, dependent fields, etc.)
    • Tables: Tablas avanzadas con columnas, filtros, búsqueda global, grouping, summaries, etc.
    • Infolists: Para mostrar datos en modo solo lectura (muy bonito para vistas de detalle).
    • Widgets: Tarjetas de estadísticas, gráficos, tablas pequeñas en el dashboard.
    • Actions: Botones y acciones personalizadas.
    • Notifications: Sistema de notificaciones integrado.
    • Pages: Páginas personalizadas (no atadas a un modelo).
  4. Livewire + Server-Driven: Todo funciona con Livewire v3. Cuando se interactúa (haciendo clic, cambiando un select, filtrand), se hace una petición AJAX al servidor, Filament procesa la lógica en PHP y devuelve solo el HTML actualizado. Rara vez se escribe JavaScript

Flujo de desarrollo con Filament

  1. Instalasr Filament en el proyecto Laravel:

    composer require filament/filament:"^5.0" -W
    php artisan filament:install --panels
    
  2. Se creas un Recurso:

    php artisan make:filament-resource Producto --generate
    
    //El --generate crea automáticamente el formulario y tabla basándose en las columnas de la migración
    
  3. Personalizar el Recurso según se necesite (agregar relaciones, campos dependientes, acciones personalizadas, etc.).
  4. Acceder al panel (normalmente en /admin) y ya se tiene un CRUD completo y bonito.

Ventajas principales

  • Velocidad de desarrollo brutal: puedes tener un backoffice completo en horas/días en vez de semanas.
  • UI muy moderna y profesional por defecto.
  • Altamente personalizable (temas, plugins, componentes custom).
  • Excelente soporte para multi-tenancy (aplicaciones SaaS).
  • Ecosistema de plugins muy grande (charts, spatie permissions, media library, etc.).
  • Se pueden usar los componentes de Filament fuera de un panel (en cualquier vista Blade o Livewire).

¿Para qué se usa más?

  • Paneles de administración clásicos.
  • CRMs.
  • Sistemas de gestión interna (inventarios, empleados, pedidos).
  • Aplicaciones SaaS completas.
  • Dashboards analíticos.
  • Portales de clientes/usuarios.

Cambiar url del panel

Como se ha dicho en este tutorial, se pueden crear varios paneles y para cambiar la URL del panel creado con Laravel Filament, hay editar el archivo del Panel Provider:
  1. Abrir el archivo del panel que quieres modificar. Normalmente se encuentra en: "app/Providers/Filament/AdminPanelProvider.php". Si existen varios paneles, puede ser "AppPanelProvider.php", "UserPanelProvider.php", etc.).
  2. Buscar el método "panel()" y agregar o modificar la línea "->path()":

    use Filament\Panel;
    
    public function panel(Panel $panel): Panel
    {
    return $panel
    ->default()
    ->id('admin')
    ->path('admin')  // ← Aquí cambias la URL
    // otras configuraciones...
    ->login()
    ->passwordReset()
    ->etc();
    }
    

Después de cambiar la URL

Es necesario ejecuta estos comandos para limpiar caché:

php artisan filament:cache-components
php artisan cache:clear
php artisan route:clear
php artisan config:clear