Občas potřebujete jednoduchou administraci ke stažení reportů, poslání emailů, vyhledání dat, zobrazení grafů nebo udělat nějaké změny. Pokud máte Laravel aplikaci a potřebujete snadný management obsahu nebo snadný management uživatelů, pak může být pro vás Laravel Nova ta nejlepší voba.

Úvod

Laravel Nova je administrační rozhraní pro Laravel, které bylo poprvé představeno Taylorem Otwellem na Laracon US 2018. Nova je instalována přes Composer jako klasický balíček a do již existujícího aplikačního rozhraní nijak nezasahuje. Jinak řečeno, od Laravel 5.6 je možné Novu nainstalovat do již vytvořené aplikace.

Na frontendu je Nova poháněna pomocí Vue.js, Vue Router a Tailwind CSS. Díky tomu vznikla silná a pružná kombinace, především pak ve vlastní úpravě - je velmi snadné vytvořit si vlastní nástroj, kartu nebo pole. Každý Eloquent model v naší aplikaci koresponduje s Nova "zdrojovou" třídou, která definuje jeho pole, akce, filtry, lenses a karty. Nova je připravena tak, aby využívala čistě jenom PHP třídy - žádná konfigurace tak není uložena v databázi.

Nova není open-source a jedná se o placený balíček. Cena pro solo vývojáře je 99$ za projekt. Cena je to poměrně vysoká a pokud na to přímo nespěcháte, tak doporučuji počkat na každoroční black friday (konec listopadu), kdy je možné získat až 30% slevu.

Resource management

Primární vlastností Novy je vytváření, čtení, úpravy a mazání záznamů z databáze. Nova má skvělou podporu všech různých Eloquent vazeb, takže není problém například updatovat data v pivot tabulce v polymorfické many-to-many vazbě. Detail záznamu obsahuje kromě informací o samotném záznamu také jeho vazby, a to vše s realtime vyhledáváním, stránkováním, řazením, filtrováním atd. enter image description here

Nova také nabízí řadu typu polí. Kromě klasických typů jako jsou text, boolean, number, file upload či date, jsou k dispozici také pole typu Markdown, Trix nebo Code.

Vyhledávání

Defaultně Nova využívá SQL dotazy pro vyhledání záznamů. Nicméně pokud vaše aplikace používá Laravel Scout, pak jej Nova bude preferovat a využije se plný potenciál vyhledávácích nástrojů, jako je například Algolia.

K vyhledávání se používají indexy záznamů a indexy vazeb, avšak je možné záznamy také spolu propojit. Například pokud vytvoříme článek, který patří danému uživateli, Nova automaticky nabídne vyhledávácí input pro rychlé vyhledání uživatele: enter image description here

Nova také obsahuje globální vyhledavač, díky čemuž lze vyhledávat záznamy skrze všechny části aplikace: enter image description here

Akce

Akce jsou jednoduché PHP třídy, které vykonávají určité úlohy nad daným záznamem nebo nad skupinou záznamů. Každá akce obsahuje "handle" metodu, která přijímá jakékoliv akční pole a kolekci modelů. V případě akcí, které by trvaly delší dobu, může Nova automaticky využít queueing od Laravelu: enter image description here

Jakmile je taková akce zadefinována a přiřazena ke zdrojové třídě, je velmi jednoduché ji spustit přes UI: enter image description here

Filtry

Filtry umožňují definovat PHP třídy, které přidávají podmínku do query a mohou být (de)aktivovány přímo v UI. Například můžeme mít filtr, který upraví query tak, aby zobrazil pouze záznamy, které mají ve sloupci danou hodnotu: enter image description here

V administračním rozhraní pak můžeme tento filtr snadno zapnout či vypnout: enter image description here

Lenses

Lenses (upřednostním tento název než krkolomný český překlad čočky či objektivy) umožňují vytvořit úplně jiný pohled nad určitými záznamy. Mějme například zdroj uživatelé a lens "Nejvýdělečnější uživatelé", který ukáže uživatele a jejich celkové objednávky, seřazené podle uživatelů, kteří vygenerovali největší příjmy. Díky lens třídě můžeme mít Eloquent query zcela pod svou kontrolou: enter image description here

Každá lens si může definovat svoje vlastní pole zcela odděleny od samotného zdroje: enter image description here

Jakmile je lens definována a přiřazena ke zdroji, můžeme si jej zobrazit: enter image description here

enter image description here

Metriky

Metriky v Nově je velmi jednoduché použít. Například si můžeme snadno porovnat počty nových uživatelů za aktuální čtvrtletí s počtem minulého čtvrtletí pomocí jediného řádku kódu: enter image description here

Avšak nejsme limitování pouze jednoduchým počítáním. Stejně tak snadno můžeme zobrazit průměr, sumu, min, max či zobrazit hodnotu v čase. Jakmile je metrika zaregistrována se zdrojem, automaticky se zobrazí v indexu zdroje: enter image description here

Úplně stejně jednoduché je zobrazit si trend. Opět vše zabere jediný řádek kódu: enter image description here

Trend je možné zobrazit nejen po dnech, ale i po minutách, hodinách, týdnech či měsících: enter image description here

Závěr

Pokud potřebujete rychlé, jednoduché a flexibilní administrační rozhraní, pak Laravel Novu můžu jenom doporučit (ostatně i tento blog běží na Nově). Pro více informací doporučuji oficiální dokumentaci nebo skvělou video sérii Laravel Nova Mastery na Laracastu, která je kompletně zdarma.