FilamentPHP — w pełni funkcjonalny panel admina w jeden dzień
FilamentPHP to biblioteka do budowania paneli administracyjnych w Laravelu. Opisuję co dostałem za darmo i co musiałem dostosować, żeby połączyć go z zewnętrznym API.
Czym jest FilamentPHP?
FilamentPHP to zestaw komponentów Livewire do budowania CRUD-owych paneli administracyjnych. Dostarcza:
- Tabele z sortowaniem, filtrowaniem, paginacją
- Formularze z walidacją
- Widgety (wykresy, statystyki)
- Ciemny motyw
- System powiadomień
Tradycyjny panel admina w Laravel zajmuje kilka dni. Z Filamentem — kilka godzin.
Konfiguracja zasobu
class PostResource extends Resource
{
protected static ?string $model = Post::class;
public static function form(Form $form): Form
{
return $form->schema([
TextInput::make('title')->required()->maxLength(255),
TextInput::make('slug')->required()->unique(ignoreRecord: true),
Textarea::make('excerpt')->rows(3),
MarkdownEditor::make('content')->required()->columnSpanFull(),
Select::make('status')
->options(['draft' => 'Szkic', 'published' => 'Opublikowany', 'archived' => 'Archiwum'])
->required(),
DateTimePicker::make('published_at'),
Select::make('categories')
->relationship('categories', 'name')
->multiple()
->preload(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('title')->searchable()->sortable(),
BadgeColumn::make('status')
->colors(['warning' => 'draft', 'success' => 'published', 'secondary' => 'archived']),
TextColumn::make('published_at')->dateTime()->sortable(),
])
->filters([
SelectFilter::make('status')->options([...]),
]);
}
}
Problem: Filament + zewnętrzne SSO
Domyślnie Filament używa standardowego auth Laravela (sesja, guards). Mój admin potrzebował logowania przez SSO (OAuth2).
Musiałem:
- Wyłączyć domyślną stronę logowania Filamenta
- Zaimplementować własny
AuthControllerktóry robi redirect do SSO - Po powrocie z SSO (z tokenem) ustawić sesję Filamenta
// AdminPanelProvider.php
->login(CustomSsoLogin::class)
->authGuard('web')
class CustomSsoLogin extends SimplePage
{
public function mount(): void
{
// Redirect natychmiast do SSO zamiast pokazywać formularz
redirect()->to(route('sso.redirect'));
}
}
Zarządzanie komentarzami
Moderacja komentarzy to jedno z głównych zastosowań panelu. Custom action w tabeli:
TablesActionsAction::make('approve')
->label('Zatwierdź')
->icon('heroicon-o-check')
->color('success')
->action(function (Comment $record) {
$record->update(['status' => 'approved']);
$this->notify('success', 'Komentarz zatwierdzony');
})
->visible(fn (Comment $record) => $record->status === 'pending'),
Co mi się podoba?
Filament pozwolił mi skupić się na logice biznesowej zamiast na pisaniu kolejnych tabel HTML. Jeden plik PostResource.php zastępuje controller, widoki, formularze i walidację.