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.
Paweł Dymek. Programista aplikacji webowych i mobilnych (full-stack). Komercyjnie z branżą związany od 2005 roku. Aktualnie entuzjasta ekosystemu Laravela i React Native, zainteresowany także gamedevem. Lubi poznawać nowe technologie i aktywny wypoczynek w górach.

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

 

Standardowo dostępne są następujące typy pól:

 

  • Avatar
  • Badge
  • Boolean
  • Boolean Group
  • Code (edytor kodu z podświetlaniem składni)
  • Country
  • Currency
  • Date (wyświetla kalendarz)
  • DateTime
  • File
  • Gravatar
  • Heading
  • ID
  • Image
  • KeyValue (wygodny interfejs do zarządzania strukturą JSON w postaci klucz-wartość)
  • Markdown (edytor WYSIWYG dla składni markdown)
  • Number
  • Password
  • Password Confirmation
  • Place (wyszukiwanie adresów poprzez Algolia Places API) 
  • Select
  • Sparkline
  • Status
  • Text
  • Textarea
  • Timezone
  • Trix (prosty edytor WYSIWYG)

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.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Po co mi logi? Przecież wszystko na develu działa