Jump to content

Aggiungere un Action in Filamentphp


Askancy

Recommended Posts

  • Admin

Cosa è una Action?

 

Cosa è un Action? "Action" è una parola che viene utilizzata abbastanza frequentemente all'interno della comunità di Laravel. Tradizionalmente, le classi PHP di Action gestiscono il "fare" qualcosa nella logica aziendale della tua applicazione. Ad esempio, effettuare l'accesso di un utente, inviare una email o creare un nuovo record utente nel database.

In Filament, le action gestiscono anche il "fare" qualcosa nella tua app. Tuttavia, sono un po' diverse dalle action tradizionali. Sono progettate per essere utilizzate nel contesto di un'interfaccia utente. Ad esempio, potresti avere un pulsante per eliminare un record cliente, che apre una finestra modale per confermare la tua decisione. Quando l'utente fa clic sul pulsante "Elimina" nella finestra modale, il cliente viene eliminato. Tutto questo flusso di lavoro è un'action.

 

Succede spesso che quando si usa un nuovo componente ci si imbatte in grosse difficoltà con una documentazione scialba e confusionaria.

image.png

Mettiamo caso che vogliate mettere un nuovo pulsante accanto a New Video, quello che viene automaticamente generato da Filamentphp, come quello che abbiamo messo noi "Import Video".

Per far ciò avremmo bisogno di accedere al ManageRecords della nostra risorsa e aggiungere:

    protected function getHeaderActions(): array
    {
        return [
            Actions\CreateAction::make(),
            Action::make('massvideo')
                ->label('Import Video')
        ];
    }

Facendo così avremmo il nostro pulsante che una volta premuto accederà a una nuova pagina o come nel nostro caso a un modal.

Utilizzando un modal noi gli diamo subito una logica di funzionamento con i form e l'azione che deve compiere una volta effettuato l'invio, ecco il nostro tasto al completo:

    protected function getHeaderActions(): array
    {
        return [
            Actions\CreateAction::make(),
            Action::make('massvideo')
                ->label('Import Video')
                ->form([
                    Textarea::make('id_videos')
                        ->required(),
                    Select::make('id_gioco')
                        ->label('Gioco:')
                        ->relationship('game', 'name')
                        ->searchable()
                        ->required(),
                ])
                ->action(function (array $data): void {
                    massVideoYT($data['id_videos'], $data['id_gioco']);
                })
        ];
    }

Che si presenterà in questo modo:

Ovviamente il pulsante potrà essere personalizzato con:

->color('success')
->icon('fas-film')
->label('Import Video')

Ecco come si presenterà il nostro pulsante:

image.png

 

Se vuoi aggiungere un pulsante nella tabella anziché nell'header, vi basterà aggiungere il codice Action::make in ArticoliResource in ->actions, subito dopo quelli di default ViewAction,EditAction e DeleteAction

 

image.png

 

Come potete vedere nel codice riportato sopra, abbiamo introdotto all'Action una funzione. La funzione visible permette di stabilire alcune condizioni quando mostrare il pulsante. nel mio caso ho impostato che il pulsante deve apparire quando l'id_topic del $record è 0. 

 

 

nb: la nostra icona non è una heroicon in svg, ma bensì una font-awesome in svg, questo perché stiamo utilizzando il package owenvoke/blade-fontawesome

 

Link to comment
Share on other sites

  • Askancy changed the title to Aggiungere un Action in Filamentphp
  • Askancy changed the title to Aggiungere un Action nell'header di Filamentphp

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. to insert a cookie message.