33
Ralf Eggert | Travello GmbH Zend Framework 2 feat. MongoDB

Zend Framework 2 feat. MongoDB

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

Page 1: Zend Framework 2 feat. MongoDB

Ralf Eggert | Travello GmbH

Zend Framework 2 feat. MongoDB

Page 2: 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/

Page 3: Zend Framework 2 feat. MongoDB

Drei Fragen an das Publikum?

• Wer nutzt das Zend Framework 2?

• Wer nutzt MongoDB?

• Wer nutzt ZF2 und MongoDB zusammen?

Page 4: Zend Framework 2 feat. MongoDB

MongoDbMongoDb

Quelle: Kalyanvarma / wikimediaQuelle: Kalyanvarma / wikimedia

Page 5: Zend Framework 2 feat. MongoDB

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

Page 6: Zend Framework 2 feat. MongoDB

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

Page 7: Zend Framework 2 feat. MongoDB

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

Page 8: Zend Framework 2 feat. MongoDB

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

Page 9: Zend Framework 2 feat. MongoDB

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()

Page 10: Zend Framework 2 feat. MongoDB

Zend Framework 2Zend Framework 2

Quelle: Yathin S Krishnappa / wikimediaQuelle: Yathin S Krishnappa / wikimedia

Page 11: Zend Framework 2 feat. MongoDB

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

Page 12: Zend Framework 2 feat. MongoDB

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

Page 13: Zend Framework 2 feat. MongoDB

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

Page 14: Zend Framework 2 feat. 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

Page 15: Zend Framework 2 feat. MongoDB

ZF2 Modul ZF2 Modul MongoDbMongoDb

Quelle: Achim Raschka / wikimediaQuelle: Achim Raschka / wikimedia

Page 16: Zend Framework 2 feat. MongoDB

Aufbau MongoDb Modul

• config– module.config.php

• src– MongoDb

• Collection

• Db

• Entity

• Service

• autoload_classmap.php

• Module.php

Page 17: Zend Framework 2 feat. MongoDB

Module.php und Konfiguration

• Module Klasse– Laden der Konfiguration

– Autoloading

• Konfiguration– Service-Manager

Page 18: Zend Framework 2 feat. MongoDB

MongoDb\Db\AdapterFactory

• Konfiguration laden

• Verbindung zum MongoClient aufbauen

• Datenbank auswählen

• »Adapter« zurückgeben

Page 19: Zend Framework 2 feat. MongoDB

MongoDb\Entity\AbstractEntity

• Wird durch konkrete Entitäten erweitert

• Implementiert ArraySerializableInterface

• Methode exchangeArray()

• Methode getArrayCopy()

• Methode __clone()

Page 20: Zend Framework 2 feat. MongoDB

MongoDb\Collection\AbstractCollection

• Wird durch konkrete Collections erweitert

• Erwartet MongoDb Adapter / Entitäts-Prototyp

• Methode find()

• Methode findOne()

• Methode insert()

• Methode update()

• Methode delete()

Page 21: Zend Framework 2 feat. MongoDB

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

Page 22: Zend Framework 2 feat. MongoDB

ZF2 Modul ZF2 Modul CustomerCustomer

Quelle: Beentree / wikimediaQuelle: Beentree / wikimedia

Page 23: Zend Framework 2 feat. MongoDB

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

Page 24: Zend Framework 2 feat. MongoDB

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

Page 25: Zend Framework 2 feat. MongoDB

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

Page 26: Zend Framework 2 feat. MongoDB

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

Page 27: Zend Framework 2 feat. MongoDB

Collection im Customer Modul

• Erweitert MongoDb\Collection\AbstractCollection

• Lesen aller Dokumente

• Lesen eines Dokuments

• Anlegen von Testdaten

• Factory

Page 28: Zend Framework 2 feat. MongoDB

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

Page 29: Zend Framework 2 feat. MongoDB

Controller im Customer Modul

• Verwendet– CustomerService

– CustomerForm

• Einige Aktionen nutzen Post-Redirect-Get-Plugin

• MongoDb basiertes Backend ist unbekannt

• Factory

Page 30: Zend Framework 2 feat. MongoDB

Weitere Module?Weitere Module?

Quelle: jez.atkinson / wikimediaQuelle: jez.atkinson / wikimedia

Page 31: Zend Framework 2 feat. MongoDB

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

– Google

Page 32: Zend Framework 2 feat. MongoDB

PhlyMongo

• Download– https://github.com/phly/PhlyMongo

• Installation per Composer

• Quelle– GitHub README

• Seit 8 Monaten kein Update

Page 33: Zend Framework 2 feat. MongoDB

Ralf Eggert | Travello GmbH

Vielen Dank für Ihre Aufmerksamkeit