Version

Theme

NOTE

You are currently viewing the documentation for Filament 4.x, which is currently in beta and is not stable. Breaking changes may be introduced to releases during the beta period. Please report any issues you encounter on GitHub.

Looking for the current stable version? Visit the 3.x documentation.

Resources

Custom resource pages

Introduction

Filament allows you to create completely custom pages for resources. To create a new page, you can use:

php artisan make:filament-page SortUsers --resource=UserResource --type=custom

This command will create two files - a page class in the /Pages directory of your resource directory, and a view in the /pages directory of the resource views directory.

You must register custom pages to a route in the static getPages() method of your resource:

public static function getPages(): array
{
    return [
        // ...
        'sort' => Pages\SortUsers::route('/sort'),
    ];
}

NOTE

The order of pages registered in this method matters - any wildcard route segments that are defined before hard-coded ones will be matched by Laravel’s router first.

Any parameters defined in the route’s path will be available to the page class, in an identical way to Livewire.

Using a resource record

If you’d like to create a page that uses a record similar to the Edit or View pages, you can use the InteractsWithRecord trait:

use Filament\Resources\Pages\Page;
use Filament\Resources\Pages\Concerns\InteractsWithRecord;

class ManageUser extends Page
{
    use InteractsWithRecord;
    
    public function mount(int | string $record): void
    {
        $this->record = $this->resolveRecord($record);
    }

    // ...
}

The mount() method should resolve the record from the URL and store it in $this->record. You can access the record at any time using $this->getRecord() in the class or view.

To add the record to the route as a parameter, you must define {record} in getPages():

public static function getPages(): array
{
    return [
        // ...
        'manage' => Pages\ManageUser::route('/{record}/manage'),
    ];
}
Edit on GitHub

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

Previous
Using widgets on resource pages