Publikováno
· Autor: Zdeněk Hejzlar · Pod kapotou · Základy · 3 min čtení
Obsah článku
Potřebujete klientovi předat administraci, ve které si sám spravuje obsah — ale nechcete ji celou psát ručně? Přesně na tohle používám Filament. Z jednoho modelu vám vygeneruje formuláře, tabulky i filtry, takže hotovou správu dat máte za odpoledne, ne za týden.
Co je resource
Filament je administrační nadstavba nad Laravelem. Základní stavební kámen je resource — třída, která pro jeden model popisuje, jak vypadá formulář pro editaci a jak tabulka s výpisem. Vygenerujete ho Artisanem:
php artisan make:filament-resource Clanek --generate
Přepínač --generate se podívá do databáze a předvyplní pole podle sloupců tabulky. Získáte funkční základ, který pak jen doladíte. Resource se skládá ze tří logických částí: definice formuláře, definice tabulky a takzvaných stránek (výpis, vytvoření, editace), které Filament vygeneruje za vás. V naprosté většině případů se staráte jen o první dvě.
Formulář
Formulář definujete jako pole komponent. Každé pole je objekt vytvořený statickou metodou make() a zřetězenými nastaveními:
public static function form(Schema $schema): Schema
{
return $schema->components([
TextInput::make('nazev')
->required()
->maxLength(160),
Textarea::make('obsah')
->rows(10),
Toggle::make('publikovano'),
]);
}
Každé pole je jeden objekt a zřetězením metod postupně upřesňujete jeho chování — od popisku přes nápovědu až po validaci. Kód se tak čte skoro jako věta: „textový vstup nazev je povinný, nejvýš sto šedesát znaků". Díky tomu je i po roce jasné, co formulář dělá.
Pole umí reagovat na sebe navzájem. Přes Get přečtete hodnotu jiného pole a podle ní třeba další pole schováte:
Select::make('typ')
->options(['clanek' => 'Článek', 'video' => 'Video'])
->live(),
TextInput::make('url_videa')
->visible(fn (Get $get): bool => $get('typ') === 'video'),
Tabulka
Výpis záznamů popíšete podobně — přidáte sloupce, vyhledávání a řazení:
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('nazev')->searchable()->sortable(),
IconColumn::make('publikovano')->boolean(),
TextColumn::make('created_at')->dateTime('d.m.Y'),
]);
}
searchable()zapne fulltextové hledání nad sloupcem.sortable()umožní klikací řazení.boolean()vykreslí ano/ne jako ikonku.
Tabulka toho ale umí mnohem víc než jen vypisovat. Přes filtry necháte uživatele zobrazit třeba jen publikované články, přes akce mu dáte tlačítka na hromadné operace — smazání, změnu stavu, export. Akce je samostatný objekt s vlastním potvrzovacím oknem i formulářem, takže i složitější operaci obsloužíte pár řádky. Za mě je právě tohle největší síla Filamentu: běžné věci, které byste jinak psali dokola, tu dostanete hotové a jen je poskládáte podle potřeby. Klient pak dostane administraci, ve které si sám filtruje, hromadně upravuje a exportuje, aniž byste na to psali vlastní logiku.
Kdy Filament ano a kdy ne
Buďme féroví: Filament je ideální na interní administraci a redakční systémy. Pokud ale stavíte veřejný web s vlastním designem, který má vypadat přesně podle grafiky, admin nástroj vám nepomůže — tam sáhnete po vlastním frontendu. Filament berte jako mocný nástroj pro backend část, ne jako řešení všeho.
Když formulář naroste, vyplatí se ho rozdělit do kroků — jak na to, ukazuju v článku vícekrokový formulář ve Filamentu. Ať už data zadává admin, nebo návštěvník, vždy je pořádně validujte; poctivá kontrola vstupu vás posune od holé administrace k nástroji, který klient opravdu rád používá.
Chcete administraci na míru, ve které se klient neztratí? Napište mi a domluvíme nezávaznou poptávku.