Symfony2 – das ultimative Newsletter Tutorial
Nach meinem ersten Blog-Beitrag über Symfony2 ist nun genug mit Theorie. Ich will was sehen! Und das tut ihr jetzt auch: Wie wäre es, wenn wir ein Newsletter-Bundle erstellen? Toll!? Na dann los!
1. Schritt
Als erstes solltet ihr den Symfony Standard installieren.
2. Schritt: Wir sind Modular!
Als nächstes erstellen wir gleich unser erstes Bundle: das NewsletterBundle. Dazu gehen wir ins Terminal und tippen den folgenden Befehl ein:
$ app/console generate:bundle --namespace Acme/Bundle/NewsletterBundle --format xml |
Die Eingabeaufforderung ist heute sehr kommunikativ und stellt euch ein paar Fragen. Ihr drückt einfach die Enter-Taste, bis der ganze Spuk vorbei ist. Gratulation, du hast gerade dein erstes Symfony Bundle erstellt!
Der Bundle Generator war auch gleich so nett, uns einen Beispielcontroller anzulegen. Ihr könnt das neue Bundle also gleich testen, indem ihr auf http://localhost:8000/hello/symfony-expert schaut. (Vorausgesetzt ihr habt den Server auch so am Laufen, wie es im Installation Guide beschrieben wurde.)
3. Schritt: Wir brauchen einen Top-Manager!
Als nächstes wollen wir unserem Bundle etwas sinnvolles beibringen. Lasst uns dazu eine neue Klasse ‘NewsletterManager.php’ anlegen. Der Newsletter Manager soll alles beinhalten, was man für die Verwaltung eines Newsletters benötigt:
- Anmelden für den Newsletter
- Abmelden vom Newsletter
- Senden eines Newsletters
src/Acme/Bundle/NewsletterBundle/Manager/NewsletterManager.php
4. Schritt: Subscribe me
Dem Konstruktor des Managers übergeben wir den Swift Mailer und die Session. Diese Services sind bereits im Symfony-Standard enthalten. Die sendNewsletter Funktion macht dann nichts anderes, als einen Newsletter – über den Swift Mailer – an alle Registranten zu versenden.
In den Funktionen subscribe und unsubscribe kann man sich für den Newsletter anmelden und wieder abmelden. Natürlich sollten die Empfänger des Newsletters in der Datenbank – anstatt wie hier nur lokal – in der Session gespeichert werden. Doch das soll nicht Teil dieser Übung sein.
5. Schritt: Was für ein Service!
Im nächsten Schritt registrieren wir unseren Newsletter Manager als Service. Ein Service wird im Service Container des Bundles registriert und ist dann im ganzen System global verfügbar – und kann von überall aus verwendet werden.
src/Acme/Bundle/NewsletterBundle/Resources/config/services.xml
Zusammengefasst heißt das:
Was haben wir also gemacht? Wir haben unseren Newsletter Manager als Service mit der ID acme_newsletter.newsletter_manager registriert. Als 'argument' haben wir den Swift Mailer übergeben. Der Manager ist nun einsatzbereit!
6. Schritt: Herr Ober! Einen Newsletter, bitte.
Beim Installieren des Symfony Standards wurde ein AppBundle angelegt. Lasst uns jetzt einen Controller für den Newsletter erstellen.
src/AppBundle/Controller/NewsletterController.php
7. Schritt: Alles der Reihe nach
So und nun alle Funktionen der Reihe nach:
- subscribeAction
Zuerst wird mittels der @Route() Annotation eine neue Route registriert. Diese verlangt zusätzlich noch nach einer Emailadresse. Direkt im Controller holen wir uns dann über den Container unseren Newsletter Manager (getNewsletterManager()). Das machen wir einfach mit der zuvor im service.xml definierten ID.
Wollen wir uns also für den Newsletter registrieren rufen wir folgende URL auf: http://localhost:8000/newsletter/subscribe/deine@email.adresse
- unsubscribeAction
Hier machen wir im Prinzip genau das Gleiche, wie in der subscribeAction und rufen folgende URL auf: http://localhost:8000/newsletter/unsubscribe/deine@email.adresse
- sendAction
Uh, jetzt wird's spannend! Schon nervös? Für das Senden einer E-Mail benötigen wir einen Betreff sowie eine Nachricht. Die übergeben wir unserer sendNewsletter Funktion – und das war's!
http://localhost:8000/newsletter/send?subject=TestNachricht&message=Du%20bist%20die/der%20Beste
Vorausgesetzt, ihr habt eure E-Mail-Adresse für den Newsletter eingetragen, sollte gerade ein nettes E-Mail in eurem Postfach gelandet sein – ach ja, und euer Mailserver sollte ebenfalls laufen. (Wenn ihr das Glück habt, auf einem Unix System zu arbeiten, dann geht das einfach mit sudo postfix start.)
Conclusion
Im Handumdrehen haben wir einen modularen Newsletter-Service geschrieben, welcher über einfache HTTP Requests gesteuert werden kann.
Wir folgern also: Wer hip sein will, der muss entweder nach Berlin ziehen, sich einen Schnurrbart wachsen lassen, oder auf Basis von Symfony programmieren – am besten gleich mit Sulu.