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

Erstellen Sie Ihr Startup mit PHP: Funktionsanforderungen und Datenbank...

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup With PHP: Getting Started
Building Your Startup With PHP: Geolocation and Google Places

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

Final product image
What You'll Be Creating

Das ist der zweite Teil der Reihe "Building Your Startup with PHP", in der ich Sie durch die Entwicklung vom Konzept bis zum Start meines Startups "Meeting Planner" führe. In diesem Teil werde ich einen Überblick über die Funktionsziele und -anforderungen geben und Sie dann durch das anfängliche Datenbankdesign und die Migration führen.

Da wir nicht sehen werden, dass viele Funktionen sofort zum Leben erweckt werden, mag diese Episode etwas trocken erscheinen, aber es ist wichtig, die Grundlagen für alles zu legen, was folgen wird. Wenn Sie keine Active Record-Datenbankmigrationen entworfen und die Gerüstanwendung Gii von Yii verwendet haben, werden Sie wahrscheinlich viel lernen.

Funktionsanforderungen

Bevor ich die Besonderheiten der Meeting Planner-Datenbank beschreibe, werde ich Sie durch die allgemeinen Funktionen führen, die Meeting Planner bietet.

Besprechungen planen

  • Ermöglichen Sie Benutzern, eine Besprechungsanfrage zu erstellen und eine andere Person einzuladen (nur eine Person für unser Produkt mit minimaler Lebensfähigkeit).
  • Ermöglichen Sie Benutzern, Orte vorzuschlagen und auszuwählen.
  • Ermöglichen Sie Benutzern, Tage und Zeiten vorzuschlagen und auszuwählen.
  • Ermöglichen Sie Benutzern, während des Besprechungsplanungsprozesses Notizen aneinander zu senden.
  • Schlagen Sie Orte vor, die für Besprechungen in der Nähe des Benutzers geeignet sind.
  • Zeichnen Sie ein Protokoll (oder einen Verlauf) aller Ergänzungen und Änderungen an Besprechungen auf.

Unterstützende Orte

  • Ermöglichen Sie Benutzern, Lieblingsorte hinzuzufügen, an denen sie sich regelmäßig treffen möchten.
  • Ermöglichen Sie Benutzern, ihre eigenen Orte für Besprechungen wie zu Hause und im Büro hinzuzufügen.
  • Schlagen Sie Orte in der Nähe jedes Teilnehmers oder in gleichem Abstand vor, teilweise basierend auf der Beliebtheit.

Unterstützende Benutzer

  • Führen Sie Listen aller in Bearbeitung befindlichen, bestätigten und vergangenen Besprechungen des Benutzers.
  • Ermöglichen Sie Benutzern die Angabe ihrer Kontaktinformationen wie Telefonnummern und Skype-Adressen für Online-Konferenzen.
  • Ermöglichen Sie Benutzern, unerwünschte E-Mails zu deaktivieren, d. h. Abbestellen.
  • Benutzer müssen ihre E-Mails authentifizieren, bevor sie Einladungen zustellen.
  • Machen Sie es einfach, E-Mails zu stoppen, die sich auf unerwünschte Einladungen beziehen, z. B. Spam.

Dinge einfacher und schneller machen

  • Ermöglichen Sie Benutzern das Erstellen von Vorlagen, die das Planen gemeinsamer Besprechungen vereinfachen, mit vorgeschlagenen Tagen und Zeiten sowie bevorzugten Orten, z.B. Ich möchte einen Morgenkaffee mit so und so an meinem üblichen bevorzugten Ort, Wochentag und Startzeit planen
  • Senden Sie E-Mails mit Besprechungsänderungen mit URL-Links zu Befehlen zum Vornehmen von Änderungen, z.B. Stornieren oder Anfordern einer Änderung des Ortes, des Tages oder der Uhrzeit; Authentifizieren Sie Benutzer durch Bestätigungscodes in diesen Links.
  • Senden Sie einen Tag zuvor Besprechungserinnerungen mit Kontaktdaten und Anweisungen.

Einnahmen erzielen

  • Werbetreibenden erlauben, z.B. Restaurants, Coffeeshops und Mietbüros, um für ihre Plätze zu werben.

Das Obige ist zwar keine vollständige Liste der Funktionen, gibt Ihnen jedoch eine klare Vorstellung davon, was das Datenbankschema zur Unterstützung benötigt.

Installieren des Meeting Planner-Repositorys

Um mit dem Einrichten Ihrer Entwicklungsumgebung für Meeting Planner zu beginnen, können Sie meinen Leitfaden Programmieren mit Yii2 verwenden: Erste Schritte; Befolgen Sie die Anweisungen zum Installieren von Composer.

Alle Meeting Planner-Tutorials werden in unserem kostenlosen Open-Source-Github-Repository markiert. Für diesen Teil der Tutorial-Reihe können Sie von hier aus das grundlegende Meeting Planner-Framework installieren.

Für Meeting Planner habe ich die erweiterte Anwendungsvorlage von Yii2 installiert, die eine etwas robustere Architektur für komplexe Anwendungen bietet, z. B. verschiedene Anwendungen für den Front-End- (Endbenutzer) und Back-End- (Administrator-) Zugriff.

Um mit dem Code zu beginnen, müssen Sie das Repository klonen, die mit Tags versehene Version für diesen Teil des Tutorials überprüfen, die Initialisierung ausführen und Composer bitten, Dateien zu aktualisieren:

Ich verwende MAMP in meiner lokalen Entwicklungsumgebung. Daher muss ich meine bevorzugte Front-End-Localhost-URL auf ~/Sites/mp/frontend/web verweisen:

Wenn Sie mit Ihrem Browser zu http://localhost:8888/mp navigieren, sollte Folgendes angezeigt werden:

Meeting Planner Yii2 Home Page

Anschließend müssen Sie eine Datenbank in MySQL erstellen und die Einstellungen in \environment\dev\common\main-local.php konfigurieren:

Bevor wir uns weiter mit der Durchführung der Migrationen befassen, möchte ich Sie durch das vorläufige Datenbankdesign führen.

Entwerfen des Datenbankschemas

Da ich mich in einem frühen Stadium der Codeerstellung befinde, versuche ich, die Datenbank gründlich zu gestalten. Es ist jedoch wahrscheinlich, dass sich das Design im Laufe der Zeit ändern oder weiterentwickeln muss.

Die Active Record-Migrationen von Yii machen es relativ einfach, Datenbanken in verschiedenen Umgebungen programmgesteuert zu erstellen, z. B. lokal und Produktion, und schrittweise zu entwickeln. Weitere Informationen zu Yii's Active Record finden Sie hier.

Die Benutzertabelle

Die erste Migration erstellt die Benutzertabelle und ist in der erweiterten Anwendungsvorlage von Yii enthalten - siehe /mp/console/migrations/m130524_201442_init.php.

Diese Migration weist Yii an, eine neue SQL-Tabelle mit den Feldern zu erstellen, die für eine unten gezeigte Benutzertabelle erforderlich sind:

Sie können die erste Migration wie folgt ausführen:

Sie sollten so etwas sehen:

Yii bietet integrierte Webunterstützung für allgemeine Vorgänge wie Anmelden, Anmelden, Abmelden und mehr. Diese Funktionalität und diese Tabelle bilden die Grundlage für die Unterstützung unserer anfänglichen Authentifizierungsfunktionen. Wir können es später auf verschiedene Arten erweitern, beispielsweise indem wir Twitter oder Google OAuth für die Authentifizierung unterstützen.

Bei Active Record-Migrationen können Sie auch rückwärts migrieren. Das kann besonders während der Entwicklung hilfreich sein. Bei einer Migration nach unten wird beispielsweise die Benutzertabelle gelöscht:

Wenn Sie Ihr Tabellendesign anpassen müssen, können Sie dies tun und dann wieder nach oben migrieren.

Der Besprechungstisch

Das Besprechungsschema und alle mit Besprechungen veknüpften Tabellen sind für die Funktionalität unserer Anwendung unglaublich wichtig.

Hier ist das Basisschema für ein Meeting:

Die Basis einer Besprechung besteht aus einem Eigentümer, einer Art Besprechungsbezeichner, einer Einladungsnachricht, einem Statusfeld und den standardmäßig erstellten und aktualisierten Zeitfeldern.

Mit Active Record kann Yii uns helfen, automatisch Beziehungen zwischen Tabellen zu erstellen. In der Besprechungstabelle erstellen wir eine Beziehung, in der jede Besprechung einen Eigentümer in der Benutzertabelle hat. Wir tun das bei der Migration, indem wir einen Fremdschlüssel erstellen, der die Besprechung -> Eigentümer_ID mit der Benutzer-> ID verbindet.

Wir müssen auch den Fremdschlüssel in der Downmigration löschen:

Nehmen Sie mich mit, wenn ich mehr über das Schema skizziere, bevor wir in Yiis automatisiertes Gerüstsystem Gii springen.

Sie können alle Migrationen im /mp/console/migrations folder sehen:

Meeting Planner Migrations

Wir werden die meisten davon unten überprüfen.

Der Tisch

Orte sind auch eine wichtige Komponente in Meeting Planner, da sie die Orte sind, an denen sich alle treffen werden. Sie werden nach Geolokalisierung indiziert und in Google Places referenziert.

Hier ist das Schema für einen Ort:

Orte bestehen aus einem name, einem place_type, einem status, einem created_at und einem a updated_at. Sie enthalten jedoch auch eine google_place_id, um sie mit dem Google Places-Verzeichnis zu verknüpfen.

Beachten Sie, dass in dieser Tabelle keine Geolokalisierung mit einem Ort verknüpft ist. Das liegt daran, dass die MySQL InnoDB-Engine keine räumlichen Indizes unterstützt. Daher habe ich mithilfe der MyISAM-Tabelle eine sekundäre Tabelle für die Geolokalisierungskoordinaten von Places erstellt. Es ist die Place_GPS-Tabelle:

Beachten Sie, dass es von place_id auf die Place-Tabelle zurückgeführt wird. Die Position von Orten ist einfach eine GPS-Koordinate - oder MySQL POINT.

Die Teilnehmertabelle

Besprechungsteilnehmer werden in einer Join-Tabelle namens Teilnehmer gespeichert. Sie verbinden die Besprechungstabelle über meeting_id und die Benutzertabelle über participant_id. Wenn wir mehr als einen Besprechungsteilnehmer pro Besprechung haben möchten, wird diese Tabelle dies in Zukunft berücksichtigen.

Andere verwandte Besprechungstabellen

Es gibt mehrere andere Tabellen, mit denen Sie unsere Besprechungsoptionen für die Planung definieren können.

Der Besprechungszeitplan

Diese Tabelle enthält alle vorgeschlagenen Besprechungszeiten (und -daten) nach Start, bei denen es sich um einen Zeitstempel handelt. Suggested_by zeigt an, wer die Zeit vorgeschlagen hat. Der status bestimmt, ob die Zeit für das Meeting ausgewählt wird.

Der Treffpunkttisch

Diese Tabelle zeigt, welche Orte für ein Meeting vorgeschlagen wurden:

Die Besprechungsprotokolltabelle

In dieser Tabelle wird der Verlauf aller Ergänzungen und Änderungen für eine bestimmte Besprechung aufgezeichnet. Jede Aktion, die während der Besprechungsplanung ausgeführt wird, wird aufgezeichnet, um eine chronologische Historie der Ereignisse im Zusammenhang mit einer Besprechung bereitzustellen. Es wird Benutzern helfen, eine Aufzeichnung aller Änderungen an ihren Besprechungen im Laufe der Zeit zu sehen, und es wird uns wahrscheinlich auch bei der Entwicklung beim Debuggen helfen.

Die Besprechungstabelle

Benutzer können kurze Notizen hin und her senden, wenn sie Änderungen an Besprechungen vornehmen. Diese Tabelle enthält diese Notizen.

Andere verwandte Benutzertabellen

Es gibt mehrere Tabellen, um die Benutzerdefinition zu erweitern.

Der Freundeskreis

Das ist eine Indextabelle, in der die Freunde jedes Benutzers aufgelistet sind. Außerdem wird aufgezeichnet, ob sie Lieblingsfreunde sind und wie viele Besprechungen sie hatten. Dies kann hilfreich sein, um die Planungserfahrung zu vereinfachen, z. B. zuerst Lieblings- oder häufige Freunde anzeigen.

Die Benutzerplatz-Tabelle

Dies ist eine Indextabelle mit Orten, an denen sich der Benutzer am liebsten trifft oder an denen er sich in der Vergangenheit getroffen hat. Wir werden hier die Lieblingsorte und die Anzahl der von diesem Benutzer abgehaltenen Besprechungen verfolgen. Das Feld is_special gibt an, dass ein Ort das eigene Zuhause, Büro oder Treffpunkt des Benutzers ist.

Die Benutzerkontakttabelle

Diese Tabelle enthält Kontaktinformationen für einen bestimmten Benutzer, z. B. Telefonnummern, Skype-Adressen und Hinweise zur Kontaktaufnahme mit dem Benutzer an diesen Orten.

Der Einfachheit halber überspringe ich zu diesem Zeitpunkt das Besprechungsvorlagenschema. Und ich habe noch keine umsatzbezogenen Funktionen entwickelt. Der Hauptgrund dafür ist, dass ich im Moment viel auf meinem Teller habe, um das Kernfeature-Set zum Laufen zu bringen und die ersten Episoden der Tutorial-Serie abzuschließen. Dies ist jedoch ein lehrbarer Moment. Es ist ein gutes Beispiel für einen Unternehmer mit begrenzten Ressourcen, der sich auf die Kernfunktionalität konzentriert, ohne zu "erkennen", dass die Generierung von Einnahmen auch ein Kernmerkmal ist. Da ich glaube, dass ich Meeting Planner zunächst ohne Umsatz booten kann, ist dies ein Kompromiss, den ich derzeit eingehen kann.

Ausführen der Datenbankmigrationen

Nachdem Sie nun etwas mehr Hintergrundinformationen zu unserem Datenbankschema und den Active Record-Migrationen haben, lassen Sie uns den Rest ausführen:

Sie sollten so etwas sehen:

Wenn wir Meeting Planner in der Produktion installieren, verwenden wir ebenfalls Migrationen, um dort auch die ursprüngliche Datenbank aufzubauen. Es ist nicht erforderlich, SQL-Dateien zu exportieren und zu importieren, die je nach den verschiedenen Versionen, die wir in verschiedenen Umgebungen verwenden, möglicherweise beschädigt werden.

Registrieren des Administratorbenutzers

Bevor wir fortfahren, müssen Sie sich als Administrator registrieren. Klicken Sie auf den Anmeldelink in der Symbolleiste und melden Sie sich einfach für die Anwendung an.

Meeting Planner Signup

Wenn Sie erfolgreich sind und zur Startseite zurückkehren, wird in der Symbolleiste Ihr Anmeldestatus angezeigt.

Meeting Planner Toolbar Logged In

Diese Formulare und Anwendungslogik sind alle in der erweiterten Anwendungsvorlage von Yii enthalten.

Verwenden von Yii's Gii zum Bauen von Gerüsten

Jetzt können wir das Gerüst so erstellen, dass es den Model View Controller-Code für allgemeine CRUD-Vorgänge (Create, Read, Update and Delete) unterstützt.

Wir werden Gii, Yiis erstaunlichen automatisierten Codegenerator, verwenden, um einen Großteil unseres grundlegenden Framework-Codes zu erstellen. Der Name mag albern sein, aber er ist unglaublich mächtig und von zentraler Bedeutung für die Yii-Entwicklung. Wir beginnen mit Meetings und Orten.

Verwenden von Gii

Zeigen Sie mit Ihrem Browser auf http://localhost:8888/mp/gii. Sie sollten dies sehen:

Meeting Planner Yii2 Gii CRUD Menu

Modelle generieren

Wenn Sie mit Gii erstellen, beginnen Sie im Allgemeinen mit dem Modellgenerator für jede Tabelle. Bevor Sie den Modellgenerator verwenden können, müssen Sie Ihre Migrationen ausgeführt haben, um die Tabellen in der Datenbank zu erstellen, wie oben beschrieben. Gii verwendet die SQL-Tabellendefinitionen, um Code für Ihr Modell zu generieren.

Meeting Planner Yii2 Gii Model Generator

Verwenden Sie den Modellgenerator, um Modellcode für die Besprechungstabelle zu generieren. Der Code wurde bereits in Ihrem Github-Repository generiert, Sie können diese Übungen jedoch erneut ausführen. Gii zeigt den Code in der Vorschau an und überschreibt ihn optional.

Füllen Sie den Modellgenerator für das Besprechungsmodell wie folgt aus:

Meeting Planner Yii2 Gii Model Generator Meetings

Generieren Sie dann das Place-Modell:

Meeting Planner Yii2 Gii Model Generator Place Table

Gii ist ziemlich erstaunlich - es baut auf unserer Tabellendefinition auf und generiert eine Menge Logik.

Im Modell /mp/frontend/models/Meeting.php werden automatisch generierte Attributbezeichnungen angezeigt:

Es generiert Feldvalidierungsregeln für Formulare:

Und es generiert Datenbankbeziehungen - hier einige zum Beispiel:

CRUD generieren

Jetzt können wir den CRUD-Generator verwenden, um den Code zum Erstellen, Lesen, Aktualisieren und Löschen von Vorgängen zu erstellen.

Besuchen Sie den CRUD-Generator und erstellen Sie ihn für Besprechungen. Beachten Sie, dass das Frontend die Yii-Anwendung ist, die der Benutzer sehen wird.

Meeting Planner Yii2 Gii CRUD Generator

Wenn Sie auf Vorschau klicken, sollte Folgendes angezeigt werden:

Meeting Planner Yii2 Gii Model Generator Overwrite

Wenn Sie auf Generieren klicken, sollten die folgenden Ergebnisse angezeigt werden:

Meeting Planner Yii2 Gii Model Generator Success

Wiederholen Sie als Nächstes den obigen Vorgang für Orte.

Sie können bereits Meetings und Orte auf unserer Website durchsuchen, um den Code anzuzeigen, der in Aktion generiert wurde. Zeigen Sie mit Ihrem Browser auf http://localhost:8888/mp/meeting. Es sollte ungefähr so aussehen:

Meeting Planner Meeting Controller

Wenn Sie Ihr Konto registriert haben, sollten Sie in der Lage sein, eine Besprechung zu erstellen. Beachten Sie, dass Gii den Unterschied zwischen Feldern, die unser Code verwalten soll, und Feldern, die von Benutzern bereitgestellt werden sollen, nicht kennt. Wir werden diese in den kommenden Tutorials bereinigen. Im Moment müssen Sie Ganzzahlen für owner_id (verwenden Sie 1 - das ist der erste angemeldete Benutzer), meeting_type, status, created_at und updated_at eingeben:

Meeting Planner Meeting Create Form

Nach dem Erstellen einiger Besprechungen sieht die Seite "Besprechungsindex" folgendermaßen aus:

Meeting Planner Meeting Controller with Data

Durch die Kombination der Leistung von Gii und Yii können Webanwendungen viel schneller erstellt werden, als dies sonst der Fall wäre. Es ist ziemlich erstaunlich, dass wir mit nur einer Datenbanktabellenstruktur und einem Block Migrationscode nur wenige Schritte von funktionierenden Controllern und Formularen entfernt sind, die mit Bootstrap reaktionsschnell erstellt wurden.

Was kommt als nächstes?

Ich hoffe, Sie fanden die Datenbank und den Gii-Rundgang interessant. Der nächste Artikel in dieser Reihe befasst sich mit dem Aufbau von Funktionen rund um Orte. Es wird beschrieben, wie Sie mithilfe von Google Places, Google Maps und HTML5-Geolokalisierung die Funktionen erstellen, die Meeting Planner benötigt. Wenn Sie einen kleinen Einblick in diese Themen erhalten möchten, habe ich ein entsprechendes Tutorial geschrieben: Verwendung von Zillow-Nachbarschaftskarten und HTML5-Geolokalisierung.

Bitte zögern Sie nicht, Ihre Fragen und Kommentare unten hinzuzufügen; Ich nehme generell an den Diskussionen teil. Sie können mich auch auf Twitter @reifman erreichen oder mir direkt eine E-Mail senden.

Verwandte Links

Advertisement
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.