Generazione della classe
CRUD è un stile di architettura software che riguarda le quattro operazioni di base della memorizzazione persistente (Create, Read, Update, Delete). È una scorciatoia per poter manipolare i dati. NexoPOS include funzionalità integrate che ti aiutano a creare componenti CRUD.
Prima di procedere con questa guida, riteniamo che tu sappia già come:
- Crea un modulo per NexoPOS
- Crea un percorso per un modulo su NexoPOS
- Crea un menu per un modulo su NexoPOS
- Crea una migrazione per un modulo su NexoPOS
Questi sono necessari per comprendere ciò che seguirà in questa guida.
Come funziona?
Durante la creazione di un componente Crud, NexoPOS creerà una classe che estende un servizio Crud di base. Quest’ultimo è responsabile della creazione di query Raw SQL per il database e, a volte, utilizza il modello fornito quando è necessario. Durante la generazione, NexoPOS analizzerà la tabella (se esiste) e creerà le colonne per la tabella e per i form. In seguito, dopo la generazione, puoi personalizzare il tuo componente Crud limitando alcune funzionalità, modificando le etichette delle colonne, mutando i dati post e put e molto altro.
Come generare un componente CRUD
Per generare un componente CRUD, dobbiamo utilizzare la CLI. NexoPOS dispone di un comando che aiuta a generare un componente CRUD per un modulo in pochissimo tempo. Useremo il seguente comando:
php artisan make:crud {identifier}
Dove {identifier} viene sostituito dal tuo identificatore di modulo effettivo (namespace). Se l’identificatore viene omesso, il componente Crud verrà creato per NexoPOS nella cartella “app/Crud”.
Una volta avviato il processo, ti verranno poste alcune domande per creare il tuo componente Crud:
Nome risorsa singola
Il nome della singola risorsa descrive come viene chiamata una singola entità del componente CRUD. Ad esempio, se crei un componente CRUD per Libri, il nome della singola risorsa sarà "Libro".
Nome della tabella utilizzato
Ogni componente CRUD necessita di una tabella su cui opera. Qui ti viene chiesto di fornire un nome per la tua tabella. Dovresti aver creato quella tabella utilizzando la guida alla migrazione.
Percorso principale verso la risorsa
Questo è il percorso relativo che porta alle tabelle. Deve essere relativo alla root del dominio. Nel nostro caso, vorremmo che i nostri Books siano accessibili all’indirizzo /dashboard/foobar/books. Quindi questa è la rotta principale che useremo.
Dovremmo anche assicurarci di aver creato tali route all’interno dei nostri moduli w.
Namespace o identificatore CRUD
L’identificatore CRUD aiuta NexoPOS a essere consapevole della risorsa e a sapere come renderla disponibile quando viene richiesta. Durante la creazione del componente Crud, ti verrà chiesto di fornire un nome di identificatore univoco. Nota che tutti i NexoPOS sono preceduti da “ns.”, quindi questo è un prefisso riservato. Per il nostro esempio attuale, l’identificatore del nostro componente Crud può essere:
foobar.books
Modello
Dovresti creare un modello per il tuo modulo nella cartella “Models”. Il nome del modello (incluso lo spazio dei nomi) deve essere fornito come valore per il modello. Supponendo che il nostro modello “Book” sia disponibile sotto lo spazio dei nomi seguente “Modules\FooBar\Models\Book”, questo sarà il valore che forniremo.
Durante la creazione di un modello, assicurati che estenda la classe NsModel invece del modello Laravel predefinito. Il motivo è garantire che il tuo modulo sia compatibile con il modulo multistore. Se non hai intenzione di farlo, puoi usare il modello Laravel predefinito.
Creare relazioni
Se il tuo modulo ha una relazione con un modulo esterno, puoi definire tale relazione durante la generazione del tuo componente Crud. Le relazioni richiedono di fornire (nell’ordine indicato, separate da virgola):
- nell’esempio, la nostra tabella può essere collegata alla tabella dell’utente, quindi “nexopos_users” è la tabella esterna.
- foreign_key: è la chiave nella nostra “foobar_books” che collega a “nexopos_users”. Nel nostro esempio, è “author”, che è l’ID degli utenti che hanno inserito il libro nel sistema.
- local_key: la chiave su "nexopos_users" usata come riferimento per la junction. Qui useremo "id".
Puoi definire ulteriori relazioni; quando hai finito, digita "S" per saltare questa sezione.
Colonne compilabili
Durante l’inserimento o l’aggiornamento di una voce, queste colonne verranno compilate esplicitamente e le altre verranno ignorate. Qui puoi definire le colonne separate da una virgola. Se non vuoi aggiungere questa restrizione, puoi digitare “S” per saltare.
Dopo questo, il file verrà generato all’interno del tuo modulo.
Registrazione componente CRUD
Affinché NexoPOS sia a conoscenza del componente CRUD appena creato, è necessario registrarlo. Registrare il CRUD implica aggiungere il tuo Crud allo stack dei CRUD registrati. Questo verrà effettuato utilizzando l’hook all’interno del metodo "register" del tuo service provider, con il seguente identificatore:
<?php
namespace Modules\FooBar\Providers;
use Illuminate\Support\ServiceProvider;
use App\Classes\Hook;
class ServiceProvider extends ServiceProvider
{
public function register()
{
Hook::addFilter( 'ns-crud-resource', /** your callback here **/ );
}
}
La callback che possiamo usare può puntare a un file separato oppure alla stessa classe. Usiamo un metodo della stessa classe per registrare il nostro componente Crud.
<?php
namespace Modules\FooBar\Providers;
use Illuminate\Support\ServiceProvider;
use App\Classes\Hook;
use Modules\FooBar\Crud\BookCrud;
class ModuleServiceProvider extends ServiceProvider
{
public function register()
{
Hook::addFilter( 'ns-crud-resource', [ $this, 'registerCrud' ]);
}
public function registerCrud( $identifier )
{
switch( $identifier ) {
case 'foobar.books': return BookCrud::class;
default: return $identifier; // required
}
}
}
Durante la verifica se il nostro identificatore CRUD è fornito, se non è presente una corrispondenza è necessario restituire l’identificatore così come è stato fornito come parametro. Potrebbe trattarsi dell’identificatore di un altro CRUD creato da un altro modulo e, non restituendo l’identificatore, si interromperà lo stack del CRUD.
Nota che ciò che viene eseguito è principalmente per la libreria frontend (Vue). Ora dobbiamo creare una route e renderizzare sia la tabella che il modulo.
Rendere la tabella
Per prima cosa dobbiamo creare una rotta e usare un controller (oppure crearne uno nuovo) per la nostra istanza CRUD. Nel nostro esempio, creeremo una rotta che assomiglia a questa.
<?php
use Moduels\Http\Controllers\FooBarController;
Route::get( '/dashboard/foobar/books', [ FooBarController::class, 'bookList' ]);
Ora dobbiamo aggiornare il metodo "bookList" nel controller che abbiamo selezionato per questo percorso. All'interno del metodo, restituiremo semplicemente l'output del metodo statico della tabella in questo modo.
<?php
namespace Modules\FooBar\Http\Controllers;
use App\Http\Controllers\DashboardController;
use Modules\FooBar\Crud\BookCrud;
class FooBarController extends DashboardController
{
public function bookList()
{
return BookCrud::table();
}
}
Il metodo "table" accetta un array che ti consente di personalizzare la tabella. Ad esempio, ecco l’elenco degli indici supportati per il tuo array:
- titolo: Garantirà che tu possa personalizzare il titolo della tabella
- Descrizione: Verrà utilizzato per descrivere la tabella CRUD.
- Se desideri personalizzare l’URL di origine utilizzato dalla libreria frontend per recuperare le voci.
- createUrl: Verrà utilizzato per sovrascrivere l’URL che porta ai moduli di creazione
- queryParams: eventuali parametri personalizzati che desideri inviare all’istanza Crud. Questo può essere utile per applicare filtri personalizzati.
Rendering di un modulo per la creazione
Puoi visualizzare 2 tipi di form: un form utilizzato durante la creazione di una nuova voce e un form utilizzato durante la modifica di una voce esistente. Questa sezione si concentra su come creare un form utilizzato per creare una voce. Come per la visualizzazione di una tabella, anche qui dovrai creare una route che porti al form. Useremo la seguente configurazione di route:
<?php
use Moduels\Http\Controllers\FooBarController;
Route::get( '/dashboard/foobar/books', [ FooBarController::class, 'bookList' ]);
Route::get( '/dashboard/foobar/books/create', [ FooBarController::class, 'createBook' ]);
Qui useremo lo slug: /dashboard/foobar/books/create, ma può terminare con quello che vuoi (new, add, ecc.). Nel metodo createBook, useremo l’istanza Crud e useremo il suo metodo statico "form" per restituire un form come questo:
<?php
namespace Modules\FooBar\Http\Controllers;
use App\Http\Controllers\DashboardController;
use Modules\FooBar\Crud\BookCrud;
class FooBarController extends DashboardController
{
public function createBook()
{
return BookCrud::form();
}
}
Rendering di un modulo per la modifica
Un modulo per eseguire una voce di modifica è un po’ diverso dal modulo utilizzato per creare una voce. Qui, mentre creiamo un percorso (route) verso il metodo del controller che gestirà l’operazione, passeremo un parametro di percorso che è l’identificatore della voce, oppure può anche essere un model binding. Ora, quando si usa il metodo “form”, dobbiamo passare il modello stesso della voce. Ecco come procederemo prima per quanto riguarda il percorso.
<?php
use Moduels\Http\Controllers\FooBarController;
Route::get( '/dashboard/foobar/books', [ FooBarController::class, 'bookList' ]);
Route::get( '/dashboard/foobar/books/create', [ FooBarController::class, 'createBook' ]);
Route::get( '/dashboard/foobar/books/{book}', [ FooBarController::class, 'editBook' ]);
Ora, all’interno del metodo “editBook”, legheremo il libro e lo passeremo al metodo “form” di BookCrud, in questo modo:
<?php
namespace Modules\FooBar\Http\Controllers;
use App\Http\Controllers\DashboardController;
use Modules\FooBar\Crud\BookCrud;
use Modules\FooBar\Models\Book;
class FooBarController extends DashboardController
{
public function editBook( Book $book )
{
return BookCrud::form( $book );
}
}
Quando non viene fornito un valore, il metodo "form" assegna "null" per impostazione predefinita al primo parametro. Al secondo parametro, un array per configurare il form. Ecco gli indici supportati per l’array di configurazione.
- Titolo: Per fornire un titolo per il modulo.
- Descrizione: Per descrivere la forma.
- Per modificare l’URL di origine utilizzato dalla libreria front-end per interagire con l’istanza Crud.
- returnUrl: Questo URL viene utilizzato come URL di ritorno all’elenco delle voci. Viene anche utilizzato per reindirizzare automaticamente l’utente quando la modifica è stata eseguita correttamente.
- submitMethod: Se per qualche motivo desideri che NexoPOS modifichi il metodo utilizzato per aggiornare/creare una voce, puoi definirlo qui. Nota che sono supportati “post” e “put”.
Questi parametri sono efficaci anche quando si utilizza il metodo "form" senza fornire un input, ma in tal caso dovrai passare come valore per il primo parametro "null".
return BookCrud::form( null, $config );
Oppure puoi usare parametri nominati come questo:
return BookCrud::form(
config: $config
);