In questi giorni ho passato un po’ di tempo a guardarmi intorno, alla ricerca di alternative a Laravel Nova per quanto riguarda la costruzione di pannelli di amministrazione con Laravel. Fino ad oggi, infatti, ho usato solo Nova e devo dire di essermi trovato davvero bene.
Sono però anche una persona molto curiosa: perché limitarmi? Così, tra una sbirciata a Reddit (quanta roba interessante che ci trovo!) e ricerche su Google, alla fine sono incappato in un progetto abbastanza particolare: Orchid.
Una “Bestia Strana”
Orchid mi ha colpito da subito perché si presenta in modo abbastanza particolare. Nonostante il claim parli di “admin panel”, nella documentazione si capisce che in realtà non è esattamente un semplice admin panel. Più che admin panel, Orchid si propone come una piattaforma di partenza con cui costruire “pannelli” di vario genere. Può trattarsi di un admin panel, certo, ma anche di un pannello specifico per gli utenti della nostra applicazione, una dashboard generica e così via.
In ogni caso, il suo scopo è aiutare a creare pannelli di controllo. In inglese, diremmo qualcosa come “admin-ish” per rendere l’idea.
Tuttavia, se ci aspettiamo qualcosa di simile a Nova… beh, siamo fuori strada. Come lo stesso creatore di Orchid ha già specificato più volte (ad esempio, qui)
This is not a crud solution.
Quindi no, niente CRUD gente. Se è questo quello che vi interessava possiamo chiuderla qui.
Ci sono però un paio di cose interessanti che vale la pena conoscere più a fondo…
Non c’è solo il CRUD nella vita!
Come ho già detto all’inizio di questo articolo, nel corso degli ultimi due anni ho lavorato un sacco con Nova. Devo dire di averlo spinto anche al suo limite un sacco di volte. Una delle poche cose che non mi piace di Nova è il suo essere così incentrato sulle entità, i model.
Per chi non conoscesse Nova: nel pannello di controllo c’è un menu nella sidebar laterale in cui possiamo aggiungere un item per ogni entità/model che dobbiamo gestire. Questo “item” nel gergo di Nova si chiama resource.
Nova è fortemente connesso al concetto di risorsa, e per questo assolve così bene ai compiti di un CRUD. Esistono anche delle variazioni, che però vanno cercate in package di terze parti che comunque non lasciano mai troppa “libertà”.
Qui arriamo all’aspetto più interessante di Orchid. Essendo slegato da qualsiasi concetto relativo al CRUD, infatti, con Orchid è possibile costruire dei flussi molto più complessi grazie allo strumento dello Screen (schermata).
Se nel CRUD di Nova il concetto più importante è la risorsa, in Orchid il concetto fondamentale è la schermata. Per Orchid, una schermata si compone sempre degli stessi elementi:
- una query, cioè tutto quello che riguarda i dati che usiamo;
- un layout, cioè tutto quello che riguarda la presentazione di questi dati (o eventuali input);
- una command bar, cioè tutto quello che si può fare con questi dati;
Cerco di fare un esempio basilare per far capire meglio come funziona il tutto.
Immaginiamo una schermata di modifica dei dati di un utente della nostra applicazione. Stando alle logiche di Orchid, divideremo “il lavoro” in questo modo:
- nella query inseriremo la logica di recupero dei dettagli dell’utente (ad esempio, dati dell’utente nel database, a partire dal suo id);
- nel layout specificheremo i campi che intendiamo modificare (nome, cognome e così via);
- nella command bar specificheremo quali sono le operazioni che possiamo fare (salva i dati, torna all’elenco utenti). Queste “azioni” saranno poi connesse a custom action che scriveremo all’interno dello screen stesso;
Ci sono anche esempi in cui alcuni componenti non sono necessariamente presenti: basta pensare all’esempio che viene proposto nel quick start, il tool per l’invio di una mail. Qui, ad esempio, la query viene vista solo marginalmente, perché quello che dobbiamo comporre è un nuovo messaggio (e non dobbiamo modificarne uno esistente);
Questi tre componenti non sono qualcosa di astratto: query, layout e commandBar sono tre metodi di default sempre presenti in qualsiasi Screen che andiamo a creare. Ognuno di loro tornerà un array di oggetti diversi.
L’esempio PostEditScreen in questa pagina rende perfettamente l’idea:
- layout restituisce un array di campi che verranno mostrati nella pagina. Un po’ come facciamo con Nova. In questo infatti ci ho visto molte similitudini;
- query restituisce un array associativo, in cui ogni chiave corrisponde al nome del campo che vogliamo popolare. Esempio: definiamo un campo “name” e query ritornerà un array contenente anche un elemento name il cui valore sarà “assegnato” al campo definito in layout;
- commandBar definisce le operazioni che vogliamo consentire all’utente. Nell’esempio linkato sopra del PostEditScreen, possiamo salvare il post oppure rimuoverlo;
Qui mi fermo un secondo per fare due osservazioni secondo me molto importanti, che fanno capire bene dov’è orientata la potenza di fuoco di Orchid.
- ricordiamo che in query non siamo legati ad Eloquent o comunque al database. Ad esempio, con Orchid potremmo tranquillamente creare un’app che lavora con un’API esterna;
- va detto anche che in commandBar possiamo metterci tutte le action che vogliamo, quindi via libera a custom action (e logiche di business) di qualsiasi tipo;
Per me davvero niente male, e questo ci porta all’ultima domanda.
Insomma… per cosa posso usare Orchid?
Arriva il momento di tirare le somme e rispondere alla domanda fatidica:
“Per cosa useresti Orchid? Posso usarlo per X?”
Vi dico la mia personalissima opinione, poi ovviamente siete padroni del vostro destino.
- il fatto che Orchid sia una piattaforma (e non un semplice CRUD) mi fa pensare al fatto che possa essere una scelta perfetta per tutte quelle piccole applicazioni in stile “pannello di controllo” che non hanno requisiti specifici in termini di design (c’è un template e ti fai andar bene quello). Orchid ci lascia liberi di implementare la nostra business logic, di specificare le fonti dei nostri dati e così via;
- non userei assolutamente Orchid se avessi bisogno di un pannello di amministrazione con un buon CRUD di base. Esiste già Nova che ha tutto pronto, mentre con Orchid dovrei riscrivermi tutta la logica più base (inserimenti, cancellazioni e così via);
Ah, quando nel primo punto ho scritto “piccole applicazioni in stile pannello di controllo” non intendevo dire pannelli riservati ad utenti privilegiati. Nelle prossime settimane, ad esempio, lavorerò su un paio di prodotti che voglio testare e penso li costruirò con Orchid, proprio perché mi sembra il caso d’uso perfetto.
I layout di Orchid infatti supportano vari tipi di componenti e non si fermano ai semplici form. Come si vede qui sopra, ad esempio: una pagina composta da sole card che mostrano informazioni.
Direi che vale la pena esplorare un po’ tutto usando la demo fornita dallo sviluppatore.
E questo è quanto.
Penso di aver riassunto in poche parole quello che volevo dire su Orchid, così come penso di aver identificato quelli che possono essere i casi d’uso ideali per un prodotto del genere. Spero possa esservi utile. Voi che altri strumenti usate per fare cose del genere? Avete mai usato Orchid?
Fatemi sapere nei commenti!
UPDATE: pare che un modulo CRUD ci sia! Ne ho parlato in questo nuovo articolo, qui.