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

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs