Jak szybko i efektywnie tworzyć CRUD-y w PHP? Wprowadzenie do Laravel Nova
Nie oszukujmy się, tworzenie CRUD-ów cieszy tylko początkujących programistów. Im bardziej człowiek staje się doświadczony, tym bardziej szkoda mu na to czasu i szuka dla siebie ciekawszych wyzwań. Ta bardzo powtarzalna czynność potrafi z czasem doprowadzić do frustracji i przyspiesza wypalenie zawodowe. Z pomocą przychodzą jednak ciekawe narzędzia, takie jak Laravel Nova.
Spis treści
Czym jest, a czym nie jest Laravel Nova?
Nova jest panelem administracyjnym stworzonym przez Taylora Otwella (twórcę Laravela), który można wdrożyć do każdej istniejącej aplikacji opartej na Laravelu bez zakłócania jej pracy. Na froncie wykorzystano Vue.js oraz Tailwind.css. Całość wygląda ładnie i przejrzyście, a przede wszystkim daje się łatwo i szybko rozszerzać o nowe możliwości.
Należy jednak podkreślić, że Nova nie jest CMS-em i z pewnością nie należy jej do tych systemów porównywać, aczkolwiek w wielu przypadkach pozwoli na bardzo szybkie zbudowanie dostosowanego do potrzeb CMS-a niemal od zera w czasie krótszym, niż konfiguracja niejednego z gotowych CMS-ów.
Za dużą wadę Novy można uznać fakt, że nie jest oprogramowaniem open source i jest rozwijana przez ograniczoną liczbę deweloperów. Ponadto nie ma możliwości przetestowania jej działania bez uprzedniego zakupu licencji, ani nawet nie ma dostępu do oficjalnej wersji demo. Przysługuje nam jednak możliwość zwrotu pieniędzy w ciągu 15 dni od zakupu.
Co oferuje Nova?
Zarządzanie zasobami
Główny koncept Novy opiera się na zarządzaniu zasobami poprzez wygenerowanie klasy odpowiedzialnej za konfigurację akcji CRUD, czyli tworzenia (Create), odczytywania (Read), aktualizacji (Update) i usuwania (Delete) rekordów w bazie danych. Zapewniono tu wsparcie dla wszystkich typów relacji Eloquenta, włącznie z tabelami typu pivot oraz relacjami polimorficznymi.
Każdy zasób (resource) musi posiadać swoją własną klasę, która powinna dziedziczyć po klasie Resource. Wewnątrz niej wystarczy jedynie utworzyć powiązanie z modelem we właściwości $model i zdefiniować pożądane w formularzach pola w metodzie fields().
Klasę zasobu można wygenerować za pomocą komendy Artisana:
php artisan nova:resource Recipe
@GIST: https://gist.github.com/czemu/dd00cd9f2a488df51c7979e79d9dd0ba
|
|
Akcje
Pozwalają wykonać dowolne operacje na jednym lub wielu rekordach na raz. Dla akcji, które potrzebują trochę więcej czasu na wykonanie (np. wysyłka newslettera) zapewniono także wsparcie dla mechanizmu kolejek Laravela.
@GIST: https://gist.github.com/czemu/26386449cc366054162422e347a01f2c
Filtry
Bez ograniczeń utworzysz dowolny filtr dla wyświetlanych w tabeli danych, który zmodyfikuje zapytanie tak, aby wyświetlone zostały tylko te rekordy, które pasują do podanej wartości. Oprócz zwykłego pola tekstowego na wpisanie wartości, w formularzu filtrowania można umieścić także checkbox, dropdown czy pole na datę z kalendarzem.
@GIST: https://gist.github.com/czemu/c239dd42bb695189972ae9cd1b4df074
Lenses
Jeśli filtry nie pozwalają Ci wygodnie spersonalizować listy rekordów, lensens otwierają nowe możliwości, pozwalając na utworzenie dodatkowego widoku tabeli z innym zapytaniem do bazy oraz z innymi kolumnami i sortowaniem.
@GIST: https://gist.github.com/czemu/fdd599a5803fd04951dda08801e0860c
Metryki
Dzięki nim możesz w kilkanaście sekund wyświetlić wskaźniki na podstawie rekordów z Twojej aplikacji. Może to być np. liczba zarejestrowanych użytkowników, trend zamówień z ostatnich dni, bądź wykres kołowy prezentujący kilka grup różnych wartości.
@GIST: https://gist.github.com/czemu/b50bfb74469e74cf971156e06cfd9ebc
Wyszukiwarka
Niewątpliwą zaletą jest całkiem sprawnie działająca wyszukiwarka, która jest dostępna niemal od ręki dla każdego zdefiniowanego zasobu. Aby podłączyć do niej dany zasób, wystarczy w jego klasie utworzyć właściwość $search z tablicą zawierającą nazwy przeszukiwanych pól w tabeli. Domyślnie Nova do wyszukiwania używa zapytań SQL, ale może również używać Laravel Scout i silnika Algolia.
@GIST: https://gist.github.com/czemu/2f1f5ea8beea0250b23d29301546d9ed
Oprócz globalnej wyszukiwarki, pola wyszukiwania dostępne są także nad listami rekordów każdego zasobu oraz w widoku szczegółów rekordu nad listą wszystkich dowiązanych do niego relacji.
Ponadto pola typu relacyjnego, takie jak BelongsTo mogą posiadać wsparcie w postaci wyszukiwarki.
Autoryzacja
Nova doskonale integruje się z politykami autoryzacji Laravela. Jeśli dany model Eloquenta posiada przypisaną politykę, Nova automatycznie wykorzysta ją do autoryzacji akcji użytkownika. Daje to pełną kontrolę nad tym kto może wyświetlać, tworzyć, aktualizować i usuwać zasoby.
Rozszerzenie możliwości – paczki do Novy
Nova to wciąż dość młody projekt i mimo że jest regularnie rozwijany, to wciąż wielu istotnych funkcji mu brakuje. Społeczność Laravela skutecznie te braki uzupełnia. Wiele ciekawych paczek do Novy można znaleźć na stronie novapackages.com. Do poniższego zestawienia wybrałem te, które z pewnością prędzej czy później Ci się przydadzą.
Advanced Nova Media Library
Umożliwia wstawienie pól do uploadu pojedynczych lub wielu plików na raz. Pod spodem korzysta ze znakomitej paczki spatie/laravel-medialibrary, dowiązującej pliki do modeli Eloquenta. Dodatkowo daje możliwość kadrowania obrazów i definiowania pól własnych dla wgrywanych plików.
Link do repozytorium na GitHub
Laravel Nova Excel
Błyskawiczny do wdrożenia import/eksport rekordów do pliku XLS/XLSX oraz CSV.
Link do repozytorium na GitHub
Nova Tool for Spatie’s Permission library
Nakładka na paczkę spatie/laravel-permission do przypisywania użytkownikom ról i uprawnień, za pomocą której można również zrealizować ograniczenie dostępu do poszczególnych sekcji Novy.
Link do repozytorium na GitHub
Nova Filemanager
Prosty, ale wygodny i ładny menadżer plików do podstawowych operacji na na plikach i folderach. Można go używać samodzielnie (osobna sekcja w menu) lub wyświetlić w formularzu jako pole do wyboru pliku.
Link do repozytorium na GitHub
Ceny licencji
Na dzisiaj koszt licencji Novy pozostaje niezmienny od dnia premiery i wynosi:
- 99 USD / projekt – licencja Solo,
- 199 USD / projekt – licencja Pro.
Czy warto zdecydować się na zakup? Uważam, że tak. Pieniężny ekwiwalent czasu zaoszczędzonego dzięki Novie jest często znacznie wyższy, niż koszt każdej z dostępnych licencji.
Zdjęcie główne artykułu pochodzi z unsplash.com.