Filament es un framework de desarrollo ágil para Laravel que facilita la creación de paneles de administración modernos de forma rápida y sencilla, proporcionando una experiencia intiutiva y fluida para el usuario.
Requisitos
Para poder utilizar Filament, debemos contar con los siguientes requisitos:
- PHP 8.1 o superior
- Laravel 10 o superior
- Livewire 3 o superior
Instalación de Filament
Para instalar Filament, ejecutaremos los siguientes comandos dentro de nuestro proyecto:
composer require filament/filament:"^3.2" -W
php artisan filament:install --panels
Esto creará y registrará un nuevo service provider en /app/Providers/Filament/AdminPanelProvider.php
Para más detalles sobre instalación de componentes y más, consultar la documentación oficial de Filament.
Crear y gestionar recursos
Para comenzar a trabajar con Filament, primero debemos crear un usuario para el panel de administración con:
php artisan make:filament-user
Una vez generado, podremos acceder a /admin
, iniciar sesión y visualizar el dashboard del panel.
Generando recursos
Una vez hayamos configurado nuestros modelos y ejecutado nuestras migraciones, podremos empezar a generar los recursos para cada uno de ellos.
Para poder generar un nuevo recurso en Filament bastaría con lanzar el siguiente comando:
Suponiendo que tenemos un modelo Cliente
php artisan make:filament-resource Cliente
Esto nos generará varios archivos dentro del directorio /app/Filament/Resources
.
+-- ClienteResource.php
+-- ClienteResource
| +-- Pages
| | +-- CreateCliente.php
| | +-- EditCliente.php
| | +-- ListClientes.php
Si visitamos la ruta /admin/clientes
en nuestro navegador, podremos ver el listado de clientes, por ahora vacío, y una opción en el menu lateral "Clientes".
Crear nuevos registros
Para crear un nuevo registro, abrimos el Resource generado por Filament, en este caso ClienteResource.php
, y dentro de él, modificamos el método form()
, qye tiene un array schema vacío. Aquí generaremos los campos que queremos que aparezcan en nuestros formularios. Puedes consultar los campos disponibles y cómo añadirlos al recurso desde el siguiente enlace.
Supongamos que nuestro Cliente tiene un campo nickname, el cual no debe ser mayor de 10 caracteres ni puede ser nulo, y un campo tipob. Para agregar estos campos a nuestro formulario, el código sería el siguiente:
use Filament\Forms;
use Filament\Forms\Form;
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('nickname')
->required()
->maxLength(10),
Forms\Components\Select::make('tipo')
->options([
'recurrente' => 'Recurrente',
'normal' => 'Normal',
])
->required(),
]);
}
Con esto, nuestros formularios estarán listos para mostrar y validar estos campos.
Hay muchas más configuraciónes para la creación de recursos, como los Lifecycle Hooks, las notificaciones, etc. Puedes consultarlo desde el siguiente enlace.
Para modificar estos registros, solo necesitamos editarlos desde el listado del recurso. Si deseamos modificar los datos antes de que se muestrén en el formulario de edición, podemos crear un método mutateFormDataBeforeFill()
, donde prodremos realizar los cambios necesarios a esos datos.
Vista de los registros
Para poder ver los registros creados para un recurso, necesitaremos crear una nueva vista para ello usando la flag --view
:
php artisan make:filament-resource Cliente --view
Por defecto, la página de vista que generamos muestra un formulario deshabilitado con los datos del registro. Si deseamos mostrar los datos como una vista normal, tendremos que definir un método infoList()
en la clase de nuestro Resource:
use Filament\InfoLists;
use Filament\InfoLists\InfoList;
public static function form(Form $form): Form
{
return $infolist
->schema([
Infolists\Components\TextEntry::make('nickname'),
]);
}
Eliminar registros
Por defecto, todos los registros que eliminemos serán borrados de la base de datos. Para evitar esto debemos añadir la flag --soft-deletes
al generar el Resource:
php artisan make:filament-resource Cliente --soft-deletes
Si el recurso ya está creado, también podremos añadir esta funcionalidad. Para ello, tenemos que actualizar el Resource:
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->filters([
Tables\Filters\TrashedFilter::make(),
// ...
])
->actions([
Tables\Actions\DeleteAction::make(), // Con esta acción añadimos el poder borrar un registro en la tabla
Tables\Actions\ForceDeleteAction::make(),
Tables\Actions\RestoreAction::make(),
// ...
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(), // Con esta acción añadimos el poder borrar muchos registros de la tabla
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
// ...
]),
]);
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
Conclusión
Filament es una herramienta poderosa que facilita la creación de paneles de administración modernos y altamente personalizables en Laravel.
En este post hemos cubierto los conceptos básicos para comenzar, desde la instalación hasta la creación de registros y personalización de formularios.
En próximos artículos, profundizaremos en cómo estructurar el dashboard y las vistas de los Resource.