Upload
ralf-eggert
View
1.500
Download
2
Embed Size (px)
DESCRIPTION
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.
Citation preview
Ralf Eggert | Travello GmbH
Zend Framework 2 feat. MongoDB
Über Ralf Eggert
• Dipl. Wirtschaftsinformatiker (FH)
• Jahrgang 1972
• GF Travello GmbH
• Buchautor zum ZF1 & ZF2 (AW / Galileo)
• Kolumnist PHP-Magazin
• ZF seit 2006
• Contributor, Speaker, Trainer, Papa
• http://www.zendframeworkschulung.de/
Drei Fragen an das Publikum?
• Wer nutzt das Zend Framework 2?
• Wer nutzt MongoDB?
• Wer nutzt ZF2 und MongoDB zusammen?
MongoDbMongoDb
Quelle: Kalyanvarma / wikimediaQuelle: Kalyanvarma / wikimedia
MongoDB über sich
• »MongoDB (from "humongous") is an open-source 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
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...
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
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
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()
Zend Framework 2Zend Framework 2
Quelle: Yathin S Krishnappa / wikimediaQuelle: Yathin S Krishnappa / wikimedia
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
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
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
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
ZF2 Modul ZF2 Modul MongoDbMongoDb
Quelle: Achim Raschka / wikimediaQuelle: Achim Raschka / wikimedia
Aufbau MongoDb Modul
• config– module.config.php
• src– MongoDb
• Collection
• Db
• Entity
• Service
• autoload_classmap.php
• Module.php
Module.php und Konfiguration
• Module Klasse– Laden der Konfiguration
– Autoloading
• Konfiguration– Service-Manager
MongoDb\Db\AdapterFactory
• Konfiguration laden
• Verbindung zum MongoClient aufbauen
• Datenbank auswählen
• »Adapter« zurückgeben
MongoDb\Entity\AbstractEntity
• Wird durch konkrete Entitäten erweitert
• Implementiert ArraySerializableInterface
• Methode exchangeArray()
• Methode getArrayCopy()
• Methode __clone()
MongoDb\Collection\AbstractCollection
• Wird durch konkrete Collections erweitert
• Erwartet MongoDb Adapter / Entitäts-Prototyp
• Methode find()
• Methode findOne()
• Methode insert()
• Methode update()
• Methode delete()
MongoDb\Service\AbstractModelService
• Wird durch konkrete Model-Services erweitert
• Erwartet Collection
• Methoden für Event-Manager
• Methoden für Meldungen
• Abstrakte save() Methode
• Abstrakte delete() Methode
ZF2 Modul ZF2 Modul CustomerCustomer
Quelle: Beentree / wikimediaQuelle: Beentree / wikimedia
Aufbau Customer Modul
• config– module.config.php
• src– Customer
– Collection
– Controller
– Entity
– Form
– InputFilter
– Service
– Validator
– View
• view– customer
• customer
• autoload_classmap.php
• Module.php
• template_map.php
Module.php und Konfiguration
• Module Klasse– Laden der Konfiguration
– Autoloading
• Konfiguration– Routing
– Service-Manager
– Controller
– Validatoren, Input-Filter, Formulare
– View-Helper und View-Manager
– Länderschlüssel
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
Entitäten im Customer Modul
• Erweitern MongoDb\Entity\AbstractEntity• AddressEntity
– Kapselt Adressdaten
– Wird von CustomerEntity verwendet
• CustomerEntity– Kapselt weitere Kundendaten
– Verwendet AddressEntity
– Primärschlüssel _id
Collection im Customer Modul
• Erweitert MongoDb\Collection\AbstractCollection
• Lesen aller Dokumente
• Lesen eines Dokuments
• Anlegen von Testdaten
• Factory
Model-Service im Customer Modul
• Erweitert MongoDb\Service\AbstractModelService
• Konstruktor erwartet– Event-Manager
– CustomerCollection
– CustomerFilter
• Methoden zum Lesen
• Implementation der save() Methode
• Implementation der delete() Methode
• Factory
Controller im Customer Modul
• Verwendet– CustomerService
– CustomerForm
• Einige Aktionen nutzen Post-Redirect-Get-Plugin
• MongoDb basiertes Backend ist unbekannt
• Factory
Weitere Module?Weitere Module?
Quelle: jez.atkinson / wikimediaQuelle: jez.atkinson / wikimedia
DoctrineMongoODMModule
• Download– https://github.com/doctrine/DoctrineMongoODMModule
• Installation per Composer
• Basiert auf Doctrine– Doctrine Modul
– Doctrine ODM
• Quellen– http://www.doctrine-project.org/projects/mongodb-odm.html
– Stackoverflow
PhlyMongo
• Download– https://github.com/phly/PhlyMongo
• Installation per Composer
• Quelle– GitHub README
• Seit 8 Monaten kein Update
Ralf Eggert | Travello GmbH
Vielen Dank für Ihre Aufmerksamkeit