Startseite
NexoPOS

Klasse wird generiert

CRUD ist ein Software-Architekturstil in Bezug auf die vier grundlegenden Operationen des persistenten Speichers (Erstellen, Lesen, Aktualisieren, Löschen). Das ist eine Abkürzung dafür, Daten bearbeiten zu können. NexoPOS wird mit integrierten Funktionen geliefert, die Ihnen helfen, CRUD-Komponenten zu erstellen.

Bevor Sie mit dieser Anleitung fortfahren, gehen wir davon aus, dass Sie bereits wissen, wie:

  • Erstelle ein Modul für NexoPOS
  • Erstellen Sie eine Route für ein Modul auf NexoPOS
  • Erstellen Sie ein Menü für ein Modul in NexoPOS
  • Erstelle eine Migration für ein Modul auf NexoPOS

Diese sind erforderlich, um zu verstehen, was im weiteren Verlauf dieses Leitfadens folgen wird.

Wie funktioniert das?

Beim Erstellen einer CRUD-Komponente erstellt NexoPOS eine Klasse, die eine Basisklasse für CRUD-Services erweitert. Diese ist dafür verantwortlich, Roh-SQL-Abfragen für die Datenbank zu erstellen und verwendet bei Bedarf manchmal das bereitgestellte Modell. Während der Generierung analysiert NexoPOS die Tabelle (falls sie vorhanden ist) und erstellt die Spalten für die Tabelle sowie die Formulare. Später, nach der Generierung, kannst du deine CRUD-Komponente anpassen, indem du bestimmte Funktionen einschränkst, die Spaltenbezeichnungen änderst, Post- und Put-Daten mutierst und vieles mehr.

So generierst du eine CRUD-Komponente

Um eine CRUD-Komponente zu generieren, müssen wir die CLI verwenden. NexoPOS hat einen Befehl, der dabei hilft, in kürzester Zeit eine CRUD-Komponente für ein Modul zu erstellen. Wir verwenden den folgenden Befehl:

php artisan make:crud {identifier}

Wobei {identifier} durch Ihre tatsächliche Modulkennung (Namespace) ersetzt wird. Wenn die Kennung weggelassen wird, wird die Crud-Komponente für NexoPOS im Ordner „app/Crud“ erstellt.

Sobald der Prozess gestartet ist, werden Sie gebeten, einige Fragen zu beantworten, um Ihre Crud-Komponente zu erstellen:

Einzelressourcenname

Der einzelne Ressourcenname beschreibt, wie eine einzelne Entität Ihrer CRUD-Komponente bezeichnet wird. Wenn Sie beispielsweise eine CRUD-Komponente für „Books“ erstellen, lautet der einzelne Ressourcenname „Book“.

image-2

Verwendeter Tabellenname

Jede CRUD-Komponente benötigt eine Tabelle, in der sie arbeitet. Hier werden Sie gebeten, einen Namen für Ihre Tabelle anzugeben. Sie sollten diese Tabelle mithilfe der Migrationsanleitung erstellt haben.

Hauptroute zur Ressource

Dies ist der relative Pfad, der zu den Tabellen führt. Er sollte relativ zum Domain-Root sein. In unserem Fall möchten wir, dass unsere Bücher unter /dashboard/foobar/books erreichbar sind. Das ist also die Hauptroute, die wir verwenden werden.

Wir sollten außerdem sicherstellen, dass wir solche Routen in unseren Modulen erstellt haben w.

Ungültiger Namespace oder Bezeichner

Die CRUD-ID hilft NexoPOS dabei, die Ressource zu erkennen und zu wissen, wie sie verfügbar gemacht wird, wenn sie angefordert wird. Beim Erstellen der CRUD-Komponente werden Sie aufgefordert, einen eindeutigen Bezeichnernamen anzugeben. Beachten Sie, dass alle NexoPOS mit „ns.“ vorangestellt sind, sodass dies ein reserviertes Präfix ist. Für unser aktuelles Beispiel kann der Bezeichner unserer CRUD-Komponente sein:

foobar.books

Modell

Du solltest ein Modell für dein Modul innerhalb des Ordners „Models“ erstellen. Der Name dieses Modells (einschließlich Namespace) sollte als Wert für das Modell angegeben werden. Angenommen, unser Modell „Book“ ist unter dem folgenden Namespace „Modules\FooBar\Models\Book“ verfügbar, dann ist das der Wert, den wir bereitstellen werden.

Bitte stellen Sie beim Erstellen eines Modells sicher, dass es die Klasse NsModel erweitert und nicht das standardmäßige Laravel-Modell. Der Grund dafür ist, sicherzustellen, dass Ihr Modul mit dem Multistore-Modul kompatibel ist. Wenn Sie das nicht vorsehen, können Sie das standardmäßige Laravel-Modell verwenden.

Beziehungen herstellen

Wenn Ihr Modul eine Beziehung zu einem externen Modul hat, können Sie diese Beziehung beim Generieren Ihrer Crud-Komponente definieren. Die Beziehungen erfordern, dass Sie Folgendes angeben (in dieser Reihenfolge, getrennt durch Kommas):

  • In unserem Beispiel kann unsere Tabelle mit der Tabelle des Benutzers verknüpft werden, sodass „nexopos_users“ die Fremdtabelle ist.
  • foreign_key: ist der Schlüssel in unserem „foobar_books“, der mit „nexopos_users“ verknüpft. In unserem Beispiel ist das „author“, also die ID der Benutzer, die das Buch in das System eingefügt haben.
  • local_key: ist der Schlüssel in „nexopos_users“, der als Referenz für die Verknüpfung verwendet wird. Wir verwenden hier „id“.

Du kannst weitere Beziehungen definieren, sobald du fertig bist, tippe „S“, um diesen Abschnitt zu überspringen.

Ausfüllbare Spalten

Beim Einfügen oder Aktualisieren eines Eintrags werden diese Spalten ausdrücklich nur befüllt und die anderen ignoriert. Hier können Sie die Spalten festlegen, getrennt durch ein Komma. Wenn Sie diese Einschränkung nicht möchten, können Sie „S“ eingeben, um sie zu überspringen.

Danach wird die Datei in Ihrem Modul generiert.

Registrierung der CRUD-Komponente

Damit NexoPOS die gerade erstellte CRUD-Komponente kennt, müssen wir sie registrieren. „CRUD registrieren“ bedeutet, deine CRUD zur Liste der registrierten CRUDs hinzuzufügen. Das wird mithilfe des Hooks in der „register“-Methode deines Service Providers vorgenommen, mit dem folgenden Bezeichner:

<?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 **/ );
    }
}

Der Callback, den wir verwenden können, kann auf eine separate Datei oder auf dieselbe Klasse zeigen. Lassen Sie uns eine Methode derselben Klasse verwenden, um unsere Crud-Komponente zu registrieren.

<?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
        }
    }
}

Beim Prüfen, ob unsere CRUD-ID bereitgestellt ist: Wenn kein „match“ vorhanden ist, muss die ID so zurückgegeben werden, wie sie als Parameter übergeben wurde. Dies könnte die ID eines anderen CRUD sein, der von einem anderen Modul erstellt wurde; andernfalls wird der CRUD-Stack unterbrochen.

Beachten Sie, dass das, was durchgeführt wird, hauptsächlich für die Frontend-Bibliothek (Vue) erfolgt. Jetzt müssen wir eine Route erstellen und entweder die Tabelle oder das Formular rendern.

Die Tabelle rendern

Wir müssen zuerst eine Route erstellen und einen Controller verwenden (oder einen neuen erstellen) für unsere CRUD-Instanz. In unserem Beispiel erstellen wir eine Route, die so aussieht.

<?php
use Moduels\Http\Controllers\FooBarController;

Route::get( '/dashboard/foobar/books', [ FooBarController::class, 'bookList' ]);

Jetzt müssen wir die Methode „bookList“ im Controller aktualisieren, den wir für diese Route ausgewählt haben. Innerhalb der Methode geben wir einfach die Ausgabe der statischen Methode „table“ so zurück.

<?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();
    }
}

Die Methode „table“ akzeptiert ein Array, mit dem Sie die Tabelle anpassen können. Zum Beispiel ist hier die Liste der unterstützten Indizes für Ihr Array:

  • Stellt sicher, dass Sie den Tabellentitel anpassen können
  • Beschreibung: Wird verwendet, um die CRUD-Tabelle zu beschreiben.
  • Wenn Sie die Quell-URL anpassen möchten, die von der Frontend-Bibliothek zum Abrufen von Einträgen verwendet wird.
  • createUrl: Wird verwendet, um die URL zu überschreiben, die zu den Erstellungsformularen führt
  • queryParams: beliebige benutzerdefinierte Parameter, die Sie an die Crud-Instanz übermitteln möchten. Dies kann nützlich sein, um benutzerdefinierte Filter anzuwenden.

Ein Formular zum Erstellen rendern

Sie können 2 Arten von Formularen rendern: ein Formular, das beim Erstellen eines neuen Eintrags verwendet wird, und ein Formular, das beim Bearbeiten eines vorhandenen Eintrags verwendet wird. Dieser Abschnitt konzentriert sich darauf, wie man ein Formular erstellt, das zum Erstellen eines Eintrags verwendet wird. Wie beim Anzeigen einer Tabelle müssen Sie hier eine Route erstellen, die zum Formular führt. Wir verwenden die folgende Routen-Konfiguration:

<?php
use Moduels\Http\Controllers\FooBarController;

Route::get( '/dashboard/foobar/books', [ FooBarController::class, 'bookList' ]);
Route::get( '/dashboard/foobar/books/create', [ FooBarController::class, 'createBook' ]);

Hier verwenden wir den Slug: /dashboard/foobar/books/create, aber er kann auf alles Mögliche enden (new, add usw.). In der createBook-Methode verwenden wir die Crud-Instanz und nutzen ihre statische Methode „form“, um ein Formular wie dieses zurückzugeben:

<?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();
    }
}

Ein Formular zur Änderung rendern

Ein Formular zum Durchführen eines ändernden Eintrags ist ein wenig anders als das Formular, das zum Erstellen eines Eintrags verwendet wird. Hier übergeben wir beim Erstellen der Route zur Controller-Methode, die diesen Eintrag verarbeitet, einen Routenparameter, der der Bezeichner des Eintrags ist, oder es kann auch ein Model Binding sein. Wenn wir jedoch die Methode „form“ verwenden, müssen wir das Modell übergeben, das der Eintrag selbst ist. So gehen wir zuerst in Bezug auf die Route vor.


<?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' ]);

Nun binden wir innerhalb der Methode „editBook“ das Buch und übergeben es an die „form“-Methode von „BookCrud“, so:

<?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 );
    }
}

Wenn kein „form“ angegeben wird, weist die „form“-Methode standardmäßig dem ersten Parameter „null“ zu. Beim zweiten Parameter handelt es sich um ein Array zur Konfiguration des Formulars. Hier sind die unterstützten Indizes für das Konfigurationsarray.

  • Titel: Um einen Titel für das Formular bereitzustellen.
  • Beschreibung: Um das Formular zu beschreiben.
  • Um die Quell-URL zu ändern, die von der Frontend-Bibliothek verwendet wird, um mit der Crud-Instanz zu interagieren.
  • returnUrl: Diese URL wird als Rücksprung-URL zur Liste der Einträge verwendet. Sie wird außerdem verwendet, um den Benutzer automatisch umzuleiten, wenn die Änderung erfolgreich vorgenommen wurde.
  • submitMethod: Falls Sie aus irgendeinem Grund möchten, dass NexoPOS die Methode ändert, die zum Aktualisieren/Erstellen eines Eintrags verwendet wird, können Sie dies hier festlegen. Beachten Sie, dass „post“ und „put“ unterstützt werden.

Diese Parameter sind auch wirksam, wenn Sie die „form“-Methode ohne eine bereitgestellte Eingabe verwenden, aber dort müssen Sie für den ersten Parameter „null“ als Wert übergeben.

return BookCrud::form( null, $config );

Oder du kannst benannte Parameter so verwenden:

return BookCrud::form(
    config: $config
);