Advanced actions

Action utility injection

The vast majority of methods used to configure actions accept functions as parameters instead of hardcoded values:

->label('Edit post')
->url(fn (): string => route('posts.edit', ['post' => $this->post]))

This alone unlocks many customization possibilities.

The package is also able to inject many utilities to use inside these functions, as parameters. All customization methods that accept functions as arguments can inject utilities.

These injected utilities require specific parameter names to be used. Otherwise, Filament doesn't know what to inject.

Injecting the current modal form data

If you wish to access the current modal form data, define a $data parameter:

function (array $data) {
// ...

Be aware that this will be empty if the modal has not been submitted yet.

Injecting the current arguments

If you wish to access the current arguments that have been passed to the action, define an $arguments parameter:

function (array $arguments) {
// ...

Injecting the current Livewire component instance

If you wish to access the current Livewire component instance that the action belongs to, define a $livewire parameter:

use Livewire\Component;
function (Component $livewire) {
// ...

Injecting the current action instance

If you wish to access the current action instance, define a $action parameter:

function (Action $action) {
// ...

Injecting multiple utilities

The parameters are injected dynamically using reflection, so you are able to combine multiple parameters in any order:

use Livewire\Component;
function (array $arguments, Component $livewire) {
// ...

Injecting dependencies from Laravel's container

You may inject anything from Laravel's container like normal, alongside utilities:

use Illuminate\Http\Request;
function (Request $request, array $arguments) {
// ...
Edit on GitHub

Still need help? Join our Discord community or open a GitHub discussion