Lernen Sie das Zusammenspiel von MongoDB und dem Zend Framework 2 anhand eines praktischen Beispiels kennen! Diese Session zeigt, wie Sie mit MongoDB eine der beliebtesten dokumentenorientierten Open-Source-Datenbanken in Ihren ZF2-Projekten unkompliziert einsetzen und welche Fallstricke Sie vermeiden können.
5. MongoDB über sich
• »MongoDB (from "humongous") is an opensource document database, and the leading
NoSQL database. Written in C++«
– Quelle: http://www.mongodb.org/
• Dokumenten-orientierter Datenspeicher
• Flexibel, agil und skalierbar
• Replizierbar und Hochverfügbar
• Index-Unterstützung für alle Attribute
6. MongoDB Feature
• Collections
– Arrays (beliebige Struktur)
– Objekte (dürfen nur public Eigenschaften haben)
• BSON (binäres JSON)
• Automatischer Primärschlüssel _id
• Weitere Indizes
• Viele Client Libraries
– PHP, Python, JavaScript, Ruby, C++, Java, Perl...
7. Installation Ubuntu
• MongoDB installieren
– $ sudo apt-get install mongodb
• PHP Treiber für MongoDB installieren
– $ sudo pecl install mongo
• PHP Extension hinzufügen
– $ sudo nano /etc/php5/apache2/php.ini
– Einfügen bei Extensions: extension=mongo.so
• Apache2 neu starten
• Testen mit phpinfo()
– Abschnitt mongo prüfen
8. Installation Windows
• Treiber herunterladen
– s3.amazonaws.com/drivers.mongodb.org/php/index.html
• Entpacken und passenden Treiber ins PHP
Extension Verzeichnis von PHP kopieren
• PHP Extension in php.ini hinzufügen
– extension=php_mongo.dll
• Apache2 neu starten
• Testen mit phpinfo()
– Abschnitt mongo prüfen
9. MongoDB Service / Shell
• MongoDb Service starten
– sudo service mongodb start
• Mongo Shell starten
– mongo
• Datenbank auswählent
– use customerdb
• Dokumente aus Collection customers finden
– db.customers.find()
• Dokument anlegen
– db.customers.insert()
11. Zend Framework 2 über sich
• »Zend Framework 2 is an open source
framework for developing web applications and
services using PHP 5.3+.«
– Quelle: http://framework.zend.com/about/
• Aktuelles Release 2.2.4
• Durch Module erweiterbar
• Erweiterbar durch eigene Features
• Sicherheit, Performance & Enterprise Ready
• Große Community
12. Zend Framework 2 Features
• Service-Manager
• Event-Manager
• Module-Manager
• Konfiguration, MVC & Formulare
• Native Unterstützung für diverse RDMS
• Keine native Unterstützung für MongoDb
• Eigene Modelinfrastruktur für MongoDb schaffen
13. Installation Beispielprojekt
• Projekt installieren
– https://github.com/RalfEggert/ipc2013-mongodb
– Per git clone oder ZIP Download
• Composer starten
– php composer.phar selfupdate
– php composer.phar install
• Virtual Host »ipc2013.mongodb« einrichten
• Im Browser aufrufen
– http://ipc2013.mongodb
14. Aufbau Beispielprojekt
• Modul Application
– Stellt Startseite, einige Filter und View-Helper bereit
• Modul MongoDb
– Adapter für MongoDb
– Abstrakte Klassen für Entitäten, Collections, Services
• Modul Customer
– Modelinfrastruktur basiert auf Modul MongoDb
– Controller, Formulare, InputFilter, Validatoren
– View-Helper und View-Skripte für Ausgabe
25. Klassen ohne Bezug zu MongoDb
• Validator zum Validieren von Länderschlüsseln
• View-Helper zur Ausgabe eines Landes anhand
des Länderschlüssels
• Hierarchische InputFilter für Adressen- und
Kundendaten
• Fieldset für Adressendaten
• Formular für Kundendaten
– Nutzt CustomerAddressFieldset
26. Entitäten im Customer Modul
• Erweitern MongoDbEntityAbstractEntity
• AddressEntity
– Kapselt Adressdaten
– Wird von CustomerEntity verwendet
• CustomerEntity
– Kapselt weitere Kundendaten
– Verwendet AddressEntity
– Primärschlüssel _id
27. Collection im Customer Modul
• Erweitert MongoDbCollectionAbstractCollection
• Lesen aller Dokumente
• Lesen eines Dokuments
• Anlegen von Testdaten
• Factory
28. Model-Service im Customer Modul
• Erweitert MongoDbServiceAbstractModelService
• Konstruktor erwartet
– Event-Manager
– CustomerCollection
– CustomerFilter
• Methoden zum Lesen
• Implementation der save() Methode
• Implementation der delete() Methode
• Factory
29. Controller im Customer Modul
• Verwendet
– CustomerService
– CustomerForm
• Einige Aktionen nutzen Post-Redirect-Get-Plugin
• MongoDb basiertes Backend ist unbekannt
• Factory