DEV Community

Horacio Degiorgi
Horacio Degiorgi

Posted on

8

Tips y Apuntes sobre Filament PHP

Creación de recursos

Los recursos (resources) son las definiciones de los elementos que serán usados para la creación de formularios, tablas y relaciones. Además de los menús de la aplicación y otros elementos de la interfaz

Crear un recurso desde artisan

php artisan make:filament-resource Blog --generate --view
Enter fullscreen mode Exit fullscreen mode

Se crean los siguientes elementos.
app/Filament/Resources/BlogResource.php
Una carpeta BlogResource y dentro
└── Pages
├── CreateBlog.php
├── EditBlog.php
├── ListBlogs.php
└── ViewBlog.php

Cada página es llamada y definida en el método BlogResource::getpages()

Configuración de recursos

Algunas variables que podemos agregar para definir los elementos y cosas del modelo que vamos a utilizar (en BlogResource.php)

class BlogResource extends Resource
{
    //modelo
    protected static ?string $model = Blog::class;
    // icono que aparece en el menú sidebar
    protected static ?string $navigationIcon = 'heroicon-o-newspaper';
    //para el título del listado de registros
    protected static ?string $pluralLabel = 'noticias';
    // podemos agrupar los distintos resources en el menú
    protected static ?string $navigationGroup = 'Tablas';
    // para los mensajes del sistema (crear biblioteca por ej.)
    protected static ?string $label = 'noticia';

Enter fullscreen mode Exit fullscreen mode

Definición del listado o tabla


public static function table(Table $table): Table
    {
        return $table
        ->columns([
            Tables\Columns\TextColumn::make('user_id')->label('#')->sortable(),
            Tables\Columns\TextColumn::make('title')->label('Título')->sortable()->searchable(),         

            Tables\Columns\TextColumn::make('abstract'),
            //Tables\Columns\TextColumn::make('content'),
            Tables\Columns\IconColumn::make('active')
            ->boolean()

                    ])
                    ->filters([
                        // Filtro usando el campo active
                Filter::make('is_active')->label('activo')
                   ->query(fn (Builder $query): Builder =>                           
                       $query->where('active', true))
            ])
                        ])
                        ->actions([
                            Tables\Actions\ViewAction::make(),
                            Tables\Actions\EditAction::make(),
                            ])
                            ->bulkActions([
                                Tables\Actions    
                                 \DeleteBulkAction::make(),
                            ]);
                        }

                   public static function getRelations(): array
                        {
                            return [
                                //
                            ];
                        }

                        public static function getPages(): array
                        {
                            return [
            'index' => Pages\ListBlogs::route('/'),
            'create' => Pages\CreateBlog::route('/create'),
            'view' => Pages\ViewBlog::route('/{record}'),
            'edit' => Pages\EditBlog::route('/{record}/edit'),
        ];
    }    
Enter fullscreen mode Exit fullscreen mode

De esta manera queda el listado de noticias y el menú lateral configurado

Image description

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)