Vai al contenuto

Aggiungere un Action in Filamentphp


Askancy

Messaggi raccomandati

  • 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 al commento
Condividi su altri siti

  • Askancy ha cambiato il titolo in Aggiungere un Action in Filamentphp
  • Askancy ha cambiato il titolo in Aggiungere un Action nell'header di Filamentphp

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora
  • Chi sta navigando   0 utenti

    • Nessun utente registrato visualizza questa pagina.
×
×
  • Crea Nuovo...

Informazioni importanti

Abbiamo inserito dei cookies nel tuo dispositivo per aiutarti a migliorare la tua esperienza su questo sito. Puoi modificare le impostazioni dei cookie, altrimenti puoi accettarli cliccando su continua. to insert a cookie message.