7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Yii

Erstellen Sie Ihr Startup mit PHP: E-Mail-Befehle

Scroll to top
Read Time: 11 mins
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Delivering the Meeting Invitation
Building Your Startup With PHP: Email Commands

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Einführung

Dieses Tutorial ist Teil der Build Your Startup With PHP-Reihe auf Envato Tuts +. In dieser Serie führe ich Sie durch den Start eines Konzepts vom Konzept zur Realität, wobei Sie meine Meeting Planner-App als reales Beispiel verwenden. Bei jedem Schritt werde ich den Meeting Planner-Code als Open-Source-Beispiele veröffentlichen, von denen Sie lernen können. Ich werde auch auf unternehmensbezogene Probleme beim Start eingehen.

Was deckt diese Episode ab?

Im letzten Tutorial haben wir mit dem Versenden von Einladungen zu Besprechungen begonnen, die zahlreiche Links enthielten, auf die die Teilnehmer antworten konnten, d.

In diesem Lernprogramm werde ich einen Überblick darüber geben, wie ich diese Links auf sichere und funktionale Weise aufgebaut und verarbeitet habe. Die Mehrheit der Meeting-Teilnehmer (vor allem zu Beginn) hat Meeting Planner noch nicht verwendet - sie sind uns unbekannt. Wir möchten sie jedoch sicher authentifizieren, damit sie die Besprechungsanfrage anzeigen und mit ihr interagieren können und eine eigene für die Zukunft erstellen können. Wir möchten auch einige Vorkehrungen treffen, wenn Personen die Besprechungsanfragen mit ihren sicheren Codes weiterleiten, ohne über die Auswirkungen nachzudenken (Neophyten! Oder nur alltägliche Personen).

Zur Erinnerung: Der gesamte Code für Meeting Planner ist im Yii2 Framework für PHP geschrieben. Wenn Sie mehr über Yii2 erfahren möchten, sehen Sie sich meine parallele Serie Programming With Yii2 bei Envato Tuts + an.

Wenn Sie dies lesen, können Sie wahrscheinlich Besprechungseinladungen auf der Live-Website MeetingPlanner.io ausprobieren. Ich beteilige mich an den Kommentarthreads und bin besonders interessiert, wenn Sie weitere Ideen haben oder Themen für zukünftige Tutorials vorschlagen möchten. Sie können mich auch auf Twitter @reifman erreichen.

Besprechungsplaner-Befehle

Die Bedeutung der Befehle

Während meines Designprozesses dachte ich an Befehle in E-Mails als Elemente sowohl für den Planungsprozess der Besprechung als auch für die Zeit bis zum tatsächlichen Ereignis.

Wenn ein Teilnehmer eine E-Mail-Einladung erhält, müssen ihm sichere Berechtigungen zum Anzeigen der Besprechungsseite sowie zum Antworten darauf gegeben werden, ob bestimmte Orte und Zeiten für ihn gut funktionieren.

Nachdem eine Besprechung abgeschlossen ist, senden wir möglicherweise Erinnerungen an Teilnehmer, die spezielle Befehle anbieten, wie z. B. "Ich bin spät dran", die den anderen Teilnehmern Ihrer misslichen Lage einen Text senden oder "eine Änderung an Ort und Stelle anfordern" oder "Abbrechen".

Alle diese Befehle müssen den Empfänger authentifizieren und ihnen einen sicheren Zugriff auf die Website ermöglichen, damit Meeting Planner seine Antworten ordnungsgemäß verarbeiten kann. Die Website muss jedoch auch sicherstellen, dass die gesamte Kontaktliste eines Mitglieds nicht freigegeben wird, wenn sie versehentlich eine E-Mail mit einer Einladung zur Besprechung an einen anderen Teilnehmer weiterleiten, der dann auf die Links klickt. Die sekundäre Partei meldet sich leicht beim Meeting Planner-Konto des Empfängers an und kann alle ihre Meetings und persönlichen Informationen einsehen.

Welche Befehle werden benötigt?

Als ich über die Vision für die Anwendung nachgedacht habe, gibt es eine Vielzahl möglicher Befehle. Hier sind einige in der ersten Einladung (die ich möglicherweise vereinfachen kann, um die Benutzererfahrung zu verbessern):

  • Besprechung ansehen
  • Akzeptiere alle Orte und Zeiten
  • Die Einladung ablehnen
  • Bestimmte Orte akzeptieren oder ablehnen
  • Bestimmte Termine und Zeiten annehmen oder ablehnen
  • Abschluss des Treffens *
  • Anderen Ort vorschlagen *
  • Anderes Datum und Uhrzeit vorschlagen *
  • Wähle den endgültigen Ort *
  • Wählen Sie das endgültige Datum und die Uhrzeit *
  • Besprechungsnotizen hinzufügen oder beantworten
  • Zeigen Sie eine Karte mit dem Ort von Orten im Kontext des Meetings an
  • Überprüfen Sie Ihre E-Mail-Einstellungen
  • Blockieren Sie diesen Organisator, um Ihnen eine E-Mail zu senden
  • Abbestellen aller E-Mails von Meeting Planner

Hinweis: Das Aussehen von mit Sternchen (*) gekennzeichneten Elementen hängt von den Meeting-Einstellungen des Organisators ab.

Sobald die Besprechung geplant ist, gibt es auch eine Reihe nachfolgender Befehle:

  • Planen Sie die Besprechung neu
  • Besprechung abbrechen
  • Zeigen Sie mir eine Karte
  • Wegbeschreibungen abrufen
  • Fordern Sie eine Änderung der Uhrzeit an
  • Fordern Sie eine Änderung des Ortes an
  • Benachrichtigen Sie die Parteien, die Sie zu spät kommen

Architektonische Überlegungen

Angesichts der Fülle verschiedener Befehle hielt ich es für sinnvoll, alle Befehle in einem einzigen Controller identisch zu authentifizieren und zu verarbeiten.

Für jetzt habe ich einen einzigen Verarbeitungspunkt in MeetingController erstellt, aber ich erwarte, dass ich später einen dedizierten CommandController erstellen werde. Ich habe auch überlegt, in Zukunft einen API-Zugriffscontroller zu erstellen und alle Funktionen der Anwendung über diesen einzigen sicheren Einstiegspunkt zu kanalisieren. Für jetzt halte ich das ab.

Zu Beginn gab ich jedem Befehl eine bestimmte Konstante im Meeting.php-Modell:

Erstellen der Befehlsverbindungen

Ich habe beschlossen, dass für jeden Befehl die folgenden URL-Argumente vorläufig angezeigt werden:

  • $id für die meeting_Id
  • $cmd für die Befehlsaktion (von Konstanten oben)
  • $obj_id für das Objekt, für das ein Objekt oder Datum ausgeführt werden kann
  • $actor_id für die user_id, die den Befehl aufruft
  • $k für den Schlüssel, der die $ actor_id auf ihrem Konto authentifiziert

Die Mehrheit der Teilnehmer hat sich zunächst nicht registriert, aber wir erstellen Authentifizierungsschlüssel, die mit ihren Einladungs-E-Mails verknüpft sind, wenn die Besprechung erstellt wird. So authentifizieren wir ihre Links von E-Mail-Einladungen.

Hier ein Beispiel für einen in E-Mails eingebetteten URL-Link:

http://meetingplanner.io/meeting/command?id=27&cmd=70&actor_id=18&k=9cHGl...1x

Angesichts der Komplexität der Erstellung der URLs mit verschiedenen Argumenten an vielen Stellen im Code erstellte ich eine Bibliothek /common/components/MiscHelpers.php, die mit buildCommand begann:

Hier ist ein Beispiel unserer Ansichtsdatei "invitation-html.php", die buildCommand() zum Anzeigen von Zeilen von Orten aufruft. Jeder Ort verfügt über Befehle, die alle diese Argumente in URLs enthalten müssen:

Sie können sehen, wie sie unten aussehen:

Meeting Planner Places and Commands for PlacesMeeting Planner Places and Commands for PlacesMeeting Planner Places and Commands for Places

Bearbeitung der Befehle

Dann baute ich die Controller-Funktion zum Authentifizieren und Verarbeiten der Befehle. Hier ist der erste Teil:

Anfangs wollte ich Sicherheitsvorkehrungen für meine eigenen Tests sowie Personen, die E-Mails mit ihren Authentifizierungslinks weiterleiten, bereitstellen.

Ein Ereignis, das ich überprüfe, ist, ob $actor_id ein anderer Benutzer ist als der aktuell angemeldete Benutzer. Dies kann beim Testen mit mehreren Konten passieren, oder es kann passieren, wenn der Teilnehmer seine Einladung an den Veranstalter weiterleitet. Letztendlich gebe ich Informationen über die Situation und biete Auswahlmöglichkeiten für Menschen. Im Moment melde ich jedoch den aktuellen Benutzer ab, bevor der anfragende Benutzer authentifiziert wird.

Wenn der Benutzer bereits als $actor_id angemeldet ist, werden sie authentifiziert. Wenn sie nicht authentifiziert sind, führen wir die Authentifizierungsprüfung durch:

Wir verwenden dafür die integrierten Funktionen findIdentity und validateAuthKey von Yii.

In naher Zukunft möchte ich die Authentifizierung über E-Mail ermöglichen, um einen eingeschränkten Zugriff auf Kontofunktionen zu erhalten. Wenn Benutzer beispielsweise nicht angemeldet sind, sondern auf Befehlslinks klicken, beschränken wir ihre Aktivitäten auf das Meeting und einige verwandte Funktionen. Sie können keine anderen Meetings, Freunde des Kontoinhabers usw. sehen. Wir bieten jedoch einen Link an, über den sie sich per Passwort oder Social-Login bei ihrem Konto anmelden können. Dadurch werden die Sicherheitsauswirkungen von Personen minimiert, die Einladungen weiterleiten.

Wenn ein neuer Benutzer, der noch nie zuvor registriert wurde, auf einen Befehlslink klickt, werden wir in ähnlicher Weise daran erinnert, dass er sich registriert und ein Kennwort oder ein soziales Login erstellt. Das User.php-Modell verfügt über Statusfelder, die angeben, ob ein Benutzer sich jemals selbst registriert hat oder ob er passiv zu einem Meeting eingeladen wurde.

Wenn die Authentifizierung erfolgreich ist, können wir jeden Befehl einfach verarbeiten:

Für Features, die ich noch nicht erstellt habe, habe ich eine Ansicht erstellt, um anzuzeigen, dass das Feature nicht verfügbar ist, z. /views/site/unavailable.php, oder wenn der Befehl missverstanden wird, dann /views/site/error.php.

Zwei Beispielbefehle

Schauen wir uns zwei Beispielbefehle an. Lassen Sie uns zunächst einen anderen Ort vorschlagen:

In diesem Fall muss der Benutzer zu unserer Website zurückkehren, um ein Formular auszufüllen, in dem er einen neuen Ort auswählen kann. Also leiten wir sie einfach auf die Seite zum Erstellen von Treffern für diese meeting_id um. Sie sind bereits authentifiziert und von oben angemeldet.

Hier ein Beispiel: Beachten Sie, dass das Breadcrumb-Menü den Kontext der Besprechung widerspiegelt, z. Frühstückstreffen:

Meeting Planner Email Commands - Add a Meeting PlaceMeeting Planner Email Commands - Add a Meeting PlaceMeeting Planner Email Commands - Add a Meeting Place

Zweitens betrachten wir alle Daten und Zeiten:

In diesem Fall müssen wir alle Zeiten für dieses Meeting und $actor_id akzeptieren. Die Abnahme erfolgt transparent hinter den Kulissen. Danach können wir sie umleiten, um das Meeting anzusehen.

So sieht es aus, wenn Sie mit allen akzeptierten Elementen in die Besprechungsansicht gelangen, z. okay, okay, okay für Orte und Zeiten unten:

Meeting Planner Email Commands - Accept all places and timesMeeting Planner Email Commands - Accept all places and timesMeeting Planner Email Commands - Accept all places and times

Eine lustige Geschichte

Das Implementieren all dieser Befehle hat definitiv einige Zeit in Anspruch genommen, aber die Funktionen von Meeting Planner wurden wirklich zum Leben erweckt. Und ich konnte meine ersten Einladungen in die Welt schicken.

Eine Frau, mit der ich zusammen war, wusste, dass ich diese Funktion fast beenden würde, also entschied sie sich, mich zu motivieren, sie schneller zu beenden. Sie sagte:

"Ich habe keine Ahnung, wann ich Sie als nächstes sehen werde, weil ich meine Einladung zum Meeting Planner noch nicht erhalten habe."

Mit ein paar Tagen zusätzlicher Arbeit schickte ich ihr die zweite Einladung zum Meetingplaner - die erste ging zu einem Freund zum Testen.

Als mein Date ihre Einladung erhielt, fragte sie beeindruckend nach zwei nützlichen Funktionen. Erstens sagte sie, sie sei nicht sicher, ob sie zu unserem Termin erscheinen könnte, es sei denn, die Veranstaltung befand sich im Google Kalender ihres Handys (im Allgemeinen ziehe ich es vor, iOS-Nutzer zu haben, nicht Android). Im nächsten Tutorial wird die Geschichte des Erstellens einer iCal-Datei (.ics) für den Import beschrieben (damit mein Datum weiß, wohin es gehen soll). Ich werde dich nicht in Atem halten - ich habe das Feature rechtzeitig für unser Datum fertiggestellt.

Zweitens fragte sie nach einem Feature, an das ich gedacht hatte, aber dessen Bedeutung nicht erkannt hatte. Sie wollte einen Ort mit Zeit angeben. Mit anderen Worten: Canlis Restaurant am Freitag um 19 Uhr, Paseo am Samstag um 20 Uhr. Derzeit werden Orte und Zeiten separat und nicht in Kombination angeboten. Ich werde diese Funktion für eine zukünftige Episode speichern.

Dies wirft die allgemeine Frage auf, wie Sie während des Startvorgangs regelmäßig Rückmeldungen von Personen einholen und in Ihre Anforderungen und Ihre Entwicklungsplanung integrieren. Nicht alle Benutzer bieten Ihnen Termine für ihre Lieblingsfunktionen an. Ich habe eine Tutorial-Episode geplant, um zu besprechen, wie dies auch in der Zukunft geschehen kann, obwohl es keine sekundäre Motivation gibt.

Was kommt als nächstes?

In der nächsten Episode werde ich ausführlich die Erstellung von Kalenderdateien (.ics) für den Import nach Google Kalender, Outlook und Apple Calendar mit den Einladungsdetails beschreiben. Das Einbeziehen von Kontaktdetails und Karten sowie das Verwalten von Zeitzonenproblemen sind dabei wichtige Aspekte.

Achten Sie auf kommende Tutorials in meiner "Your Startup With PHP" -Serie - ich hoffe, Sie werden den Meeting Planner gerne ausprobieren. Probieren Sie es gleich jetzt aus!

Bitte zögern Sie nicht, Ihre Fragen und Kommentare unten hinzuzufügen. Ich versuche regelmäßig an den Diskussionen teilzunehmen. Sie können mich auch auf Twitter @reifman erreichen.

ähnliche Links

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.