Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

AngularJS und Laravel: Beginnen Sie mit dem Aufbau eines CRM

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Building a Customer Management App Using AngularJS and Laravel.
AngularJS and Laravel: Finishing Building a CRM

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

Bei der Erstellung einer Einzelseiten-App sollten wir ein gewisses Framework verwenden, um einen Teil der Arbeit für uns zu erledigen, damit wir uns auf die eigentliche Funktionalität konzentrieren können.  AngularJS passt hier perfekt, denn Features wie dynamische Abhängigkeitseinspritzung und bidirektionale Datenbindung sind einfach großartig.  Manchmal benötigen wir auch eine Art Server.  Wenn Sie sich für PHP entschieden haben, ist Laravel möglicherweise die beste Option, da es einfach zu bedienen ist und ziemlich leistungsfähig ist.

Einführung

In diesem Lernprogramm erstellen Sie ein einfaches Kunden-/Transaktionsverwaltungssystem mit der Möglichkeit, Transaktionen und Kunden hinzuzufügen und zu entfernen.  Das ist wahrscheinlich nicht das, was Sie oft machen, aber es zeigt, wie Sie die Features beider Frameworks nutzen können.

Bevor wir beginnen, sollten Sie eine MySQL-Datenbank einrichten, die wir verwenden werden (Laravel unterstützt viele weitere, aber diese ist immer noch die beliebteste).  Sie benötigen keinen Webserver, da wir das eingebaute PHP-System verwenden werden. Beachten Sie jedoch, dass diese Lösung nur für die Entwicklung gedacht ist und niemals in der Produktion verwendet werden sollte - es fehlen viele Funktionen, die für Sie erforderlich sind App ordnungsgemäß in der Öffentlichkeit arbeiten).  Dafür benötigen wir mindestens die PHP-Version 5.4.0.

Vorbereitung

Als erstes müssen wir Laravel installieren.  Der gesamte Vorgang ist auf der Laravel-Website beschrieben.  Danach sollten Sie Ihr Projektverzeichnis mit allen Laravel-Dateien dort erstellt haben.  Navigieren Sie in der Befehlszeile zu diesem Verzeichnis und führen Sie diesen Befehl dort aus:

Wenn alles in Ordnung ist, sollten Sie sehen, dass der lokale Entwicklungsserver mit locahost:8000 gestartet wurde.  Öffnen Sie Ihren Browser und navigieren Sie dort. Sie sollten die Startseite von Laravel sehen:

first_run

Nun können wir zur eigentlichen Anwendung übergehen.

Migrationen und Modelle

Modelle in Laravel sind wie in jedem anderen MVC-Framework.  Sie verwenden Eloquent ORM, um Ihnen die Arbeit zu erleichtern - Sie werden wahrscheinlich nie wieder eine SQL-Abfrage schreiben müssen (es sei denn, Sie möchten etwas, das Eloquent nicht unterstützt).  Mithilfe von Migrationen können Sie die Datenbankstruktur mit der Möglichkeit ändern, Änderungen rückgängig zu machen, wenn etwas schief geht.  Weitere Informationen zu Migrationen finden Sie in der Dokumentation.

In unserer App werden wir zwei Modelle verwenden:

  • Customer - speichert die Kundendaten
  • Transaction - enthält die Informationen zu einer Transaktion

Beginnen wir damit, Migrationen für sie zu erstellen.  Wenn Sie dies noch nicht getan haben, fahren Sie den zuvor heruntergefahrenen Server herunter (Ctrl+ C).

Customers

Rufen Sie zuerst diesen Befehl auf:

Dadurch wird eine Migrationsdatei mit einer grundlegenden Struktur für Sie erstellt.  Navigieren Sie jetzt zu app/database/migrations.  Es sollte eine Datei geben, deren Name mit einem Zeitstempel beginnt und mit "create_customers_table" endet.  Laravel hat diese Grundstruktur automatisch für Sie erstellt.  Die up()-Methode wird aufgerufen, wenn die Migration angewendet wird, und down(), wenn ein Rollback ausgeführt wird.

Rufen Sie zuerst die Schema::create()-Methode auf.  Es braucht zwei Argumente - den Namen des Schemas und eine Rückruffunktion:

Der Callback wird ausgeführt, wenn die Tabelle erstellt wird.  Das Tabellenobjekt wird als $table-Variable übergeben, und wir manipulieren die Struktur der Tabelle.  Fügen Sie ein id-Feld für die automatische Erhöhung hinzu:

Als nächstes gibt es drei Zeichenkettenfelder für den Vornamen, den Nachnamen und die Email-Adresse des Kunden:

Wir machen das email-Feld eindeutig, indem wir die unique()-Methode darauf aufrufen.

Die letzte Methode ist für die Zeitstempel:

Dadurch werden zwei Datumsfelder im Schema erstellt: created_at und updated_at.  Diese werden von Eloquent zum Speichern der Zeit verwendet, zu der das Element erstellt und aktualisiert wurde.

Schließlich sollte der Code so aussehen:

Die down()-Methode ist viel einfacher - das Schema wird einfach gelöscht:

Transaktionen

Der Code hier wird dem des Kunden ähnlich sein.  Rufen Sie zuerst diesen Befehl auf:

Suchen Sie nun die entsprechende Datei in der app/database/migrations und öffnen Sie sie.  Beginnen Sie wie zuvor mit der Erstellung des Schemas:

Fügen Sie nun die Felder für die ID, den Namen der Transaktion, ihre Kosten und die ID des Kunden hinzu, zu dem sie gehört:

Und natürlich die Zeitstempel:

Der endgültige Code sollte folgendermaßen aussehen:

Und nun die down()-Methode:

Datenbankkonfiguration

Bevor Sie die Migrationen anwenden, müssen Sie nun die Verbindung zu Ihrer Datenbank konfigurieren.  Öffnen Sie die Datei app/config/database.php, und fahren Sie mit Zeile 55 fort.  Hier sind die Konfigurationsdaten für MySQL (da sind einige andere, z.B. SQLite oder Postgres):

Nachdem Sie das eingegeben haben, können Sie loslegen.  Stellen Sie sicher, dass Sie die Datei gespeichert haben, und rufen Sie diesen Befehl aus dem Hauptverzeichnis Ihrer App (der mit der artisan-Datei) auf:

Und das ist es.  Wenn keine Fehler aufgetreten sind, wurden die Tabellen erfolgreich erstellt.  Sie können eine Verbindung zu Ihrer Datenbank mit z. B. phpMyAdmin herstellen, um manuell zu prüfen, ob Sie dies wünschen.

Modelle

In Laravel ist das Erstellen eines Modells, nachdem Sie Ihre Datenbank mithilfe von Migrationen konfiguriert haben, sehr schnell.  Navigieren Sie zu app/models und löschen Sie die dort vorhandene Beispieldatei User.php.  Erstellen Sie nun zwei Dateien mit den Namen Customer.php und Transaction.php.

Beginnen wir mit Customer.php. Jedes Modell in Laravel muss die Eloquent-Klasse erweitern:

Nun definieren wir eine Beziehung zwischen dem Kunden und seinen Transaktionen.  Dazu definieren Sie im Modell eine öffentliche Methode mit dem Namen der gewünschten Eigenschaft (in diesem Fall transactions):

Im Hauptteil der Funktion gibt es nur noch eine Zeile:

Dies teilt Eloquent mit, dass es alle Transaktionen mit customer_id des Kunden unter einer Eigenschaft namens transakctions bereitstellen sollte.

Jetzt werden wir die Transaktionen in etwa genauso machen, aber die Beziehung wird rückgängig gemacht, um den Eigentümer der Transaktion über die customer-Eigenschaft zugänglich zu machen:

Das geschieht mit der $this->belongsTo()-Methode des Modells.

Controllers

Um die Modelle tatsächlich verwenden zu können, müssen wir Controller für sie erstellen.  Gehen Sie zum app/controllers-Verzeichnis und löschen Sie nur die HomeController.php. BaseController.php ist wichtig, da unsere Controller sie erweitern werden.  Erstellen Sie nun zwei Dateien: CustomerController.php und TransactionController.php.

CustomerController

Dieser Controller übernimmt alles, was mit den Kunden zu tun hat: Hinzufügen, Entfernen und Anzeigen einer Liste.  Beginnen Sie mit der Definition der Klasse:

Wir werden Laravel-Funktion namens RESTful-Controller verwenden.  Das Erstellen von Routen wird einfacher, da nur die Basis-URI definiert werden muss und Laravel alles für uns erledigt.  Dazu müssen Sie Ihre Funktionsnamen mit dem entsprechenden HTTP-Verb starten und dann mit dem Namen der Subroute fortfahren (mithilfe von camelCase).  Wenn wir beispielsweise eine Methode namens getNames hätten und der Basis-URI /customers wäre, kann auf die Methode unter /customers/names zugegriffen werden.

Die Methoden getIndex(), postIndex(), deleteIndex() usw. werden der Standardroute (in diesem Fall /customers) zugeordnet.

Nun definieren wir unseren ersten Weg - den Kunden anhand seiner ID zu erreichen:

Holen wir uns die ID aus den Abfrageparametern (Laravel bietet eine nette Input-Klasse, um damit umzugehen, damit Sie nicht $ _GET, $ _POST und $ _FILES verwenden müssen):

Suchen Sie nach dem Benutzer in der Datenbank mit dieser ID:

Jede Methode des Controllers muss einen Wert zurückgeben, der eine Zeichenfolge ist oder über eine __toString()-Methode verfügt.  In diesem Fall wird das zurückgegebene Customer-Modell vor dem Senden in JSON konvertiert.

Jetzt können wir eine Liste aller Benutzer zurückgeben (diese ist unter /customers/all verfügbar):

Wie Sie sehen, können wir alle Kunden mit der Methode all() des Modells erreichen.

Nun der längste Teil, einen neuen Kunden hinzufügen:

Lassen Sie uns zunächst prüfen, ob alle erforderlichen Informationen bereitgestellt wurden.  Wir können dies mit der Input::has()-Methode machen:

Lassen Sie uns alle Eingabefelder in die Variable $input setzen, um zu vermeiden, dass Input::get() immer wieder aufgerufen wird.  Das kann mit Input::all() erfolgen:

Als Nächstes prüfen wir, ob eine der Eingaben leer ist.  In diesem Fall geben wir einen HTTP 400-Fehler bei fehlerhafter Anforderung mit einer ausführlicheren Nachricht zurück:

Da wir einen anderen Statuscode als 200 zurückgeben wollten, anstatt nur die Nachricht als String zurückzugeben, haben wir Response::make() verwendet, das die zu sendenden Daten als ersten Parameter und den Statuscode als zweiten verwendet.  Werfen Sie einen Blick auf die Dokumente, wenn Sie mehr über die Antworten erfahren möchten.

Nun erstellen wir endlich ein neues Customer-Modell und füttern es mit den bereitgestellten Daten:

Danach können wir das neu erstellte Modell speichern und auf die Anfrage damit antworten:

Hier behandeln wir den Fall, wenn nicht alle Eingaben gemacht wurden:

Schließlich brauchen wir auch die Fähigkeit, die Kunden zu entfernen.  Dieser ist wirklich kurz:

Wir beginnen damit, die ID des Kunden zu löschen:

Als Nächstes suchen und löschen wir den Kunden:

Als Nächstes suchen und löschen wir den Kunden:

Bevor die Routen abgerufen werden können, müssen wir sie einhaken.  Öffnen Sie die Datei app/routes.php, löschen Sie alles außer dem Kommentar und fügen Sie diese Zeile am Ende der Datei ein:

Dadurch wird Laravel angewiesen, alle Anfragen an /customers an unseren CustomerController weiterzuleiten.  Jetzt können Sie CURL verwenden, um damit zu spielen.  Starten Sie den Server zunächst mit php artisan serve und Sie können beispielsweise einen Kunden anlegen:

Dann können Sie die Liste aller Kunden erhalten:

TransactionController

Das ist, wie das Modell, dem CustomerController sehr ähnlich.  Erstellen Sie zuerst die Klasse:

Dann definieren wir die Methode, um alle Transaktionen für einen Benutzer abzurufen:

Wie Sie sehen, verwenden wir die zuvor definierte Beziehung, um die Transaktionen abzurufen (erinnern Sie sich jetzt an die Abfrage, die Sie schreiben mussten, um mit normalem PHP und SQL dasselbe zu erreichen).

Als nächstes werden Transaktionen angelegt:

Wie zuvor prüfen wir, ob alle erforderlichen Informationen bereitgestellt werden:

Wenn ja, ordnen Sie es einer $input-Variable zu:

Prüfen Sie, ob die angegebenen Werte leer sind, und geben Sie gegebenenfalls einen Fehler zurück:

Erstellen Sie nun die Transaktion und geben Sie alle angegebenen Informationen an:

Jetzt müssen wir es dem entsprechenden Kunden hinzufügen.  Suchen wir sie anhand der angegebenen ID und fügen Sie der Transaktionsliste die $transaction hinzu:

Das geschieht mit der von Laravel zur Verfügung gestellten transaction->save()-Methode.  Jetzt können wir mit der erstellten Transaktion antworten:

Und behandeln Sie den Fall, dass keine oder nicht alle Daten bereitgestellt wurden:

Danach gibt es auch eine Methode, um die Transaktion auf dieselbe Weise zu löschen, wie wir den Kunden gelöscht haben:

Fügen Sie nun einfach die Route hinzu und Sie können den Controller mit CURL testen:

Schlussfolgerung

Okay, das ist das Ende des ersten Teils. Im zweiten Teil dieses Tutorials erstellen wir das Frontend mit AngularJS.  Fühlen Sie sich frei, um Ihrer App weitere Funktionen hinzuzufügen (z. B. Kunden bearbeiten oder sortieren). Falls Sie die gewünschten Informationen nicht gefunden haben, lesen Sie die Laravel-Dokumentation.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.