Propel ORM in das Zend Framework integrieren
Da ich zur Zeit viel mit dem Propel ORM (Object-Relational Mapping) innerhalb einer Zend Framework Applikation zu tun habe, möchte ich euch heute zeigen, wie man die aktuelle Version von Propel (1.5.6) in eine Zend Framework Anwendungen integriert.
Bevor man Propel installiert, benötigt man Phing. Dies kann man unter anderem über PEAR installieren. Aber vorsicht, die aktuelle Propel Version (1.5.6) verträgt sich nicht mit der neusten Phing Version (2.4.4). Man benötigt die Version 2.4.2 von Phing.
Phing über PEAR installieren:
(Falls schon eine aktuellere Phing Version installiert ist, kann man diese mit der Option “-f” überschreiben.)
pear channel-discover pear.phing.info pear install phing/phing-2.4.2
Propel benötigt die PHP Extension “xsl”. Falls diese noch nicht installiert ist und ihr einen Fehler bekommt, könnt ihr sie mit folgendem Befehl installieren:
apt-get install php5-xsl
So, jetzt können wir Propel über PEAR installieren:
pear channel-discover pear.propelorm.org pear install -a propel/propel_generator pear install -a propel/propel_runtime
Alternativ kann man Propel auch als Package downloaden oder aus dem SVN exportieren.
Alle Möglichkeiten und Infos findet ihr auf der Download Seite von Propel.
Mein Example Projekt hat die Vorgeschlagene Verzeichnis Struktur für Projekte von Zend Framework.
Wir erstellen im Ordner build (scripts/build/) eine Datei mit dem Namen “build.properties”.
Als Datenbank nutze ich eine MySQL. Die Datei hat folgenden Inhalt:
propel.project = example propel.database = mysql propel.database.url = mysql:host=localhost;dbname=example propel.database.user = root propel.database.password = propel.mysql.tableType = InnoDB propel.php.dir = ${propel.project.dir}/../../application/models propel.phpconf.dir = ${propel.project.dir}/../../application/configs
Um die Models erstellen zu können, benötigen wir eine “schema.xml”. Diese möchte ich aber nicht händisch erstellen. Da meine Datenbank schon existiert, nutze ich das “reverse engineering” das Propel mitliefert.
propel-gen reverse
Jetzt findet ihr im Ordner eine “schema.xml”. Nun können wir die Models generieren. Das Funktioniert mit folgendem Befehl:
propel-gen om
Die Models findet man nun im Ordner “application/models/”
Wir benötigen jetzt noch eine Propel PHP Config.
Im Ordner build (scripts/build/) erstellen wir eine Datei mit dem Namen “runtime-conf.xml” und folgendem Inhalt:
<?xml version="1.0" encoding="UTF-8"?> <config> <!-- Uncomment this if you have PEAR Log installed <log> <type>file</type> <name>/path/to/propel.log</name> <ident>propel-example</ident> <level>7</level> </log> --> <propel> <datasources default="example"> <datasource id="example"> <adapter>mysql</adapter> <!-- sqlite, mysql, myssql, oracle, or pgsql --> <connection> <dsn>mysql:host=localhost;dbname=example</dsn> <user>root</user> <password></password> </connection> </datasource> </datasources> </propel> </config>
Mit folgendem Befehl erstellen wir die Propel PHP Config aus der “runtime-conf.xml”.
propel-gen convert-conf
Die Config Datei findet ihr jetzt unter “application/configs/”.
Da ich den Pfad zu den Models im include_path benötige und die Propel Config zentral definieren möchte, erweitere ich die “application.ini” unter “application/configs/” um zwei Einträge:
includePaths.models = APPLICATION_PATH "/models" propelconfig = APPLICATION_PATH "/configs/example-conf.php"
Im Bootstrap muss Propel hinzugefügt und initialisiert werden:
protected function _initPropel() { require_once 'propel/Propel.php'; Propel::init($this->getOption('propelconfig')); }
So das wars, jetzt können wir Propel verwenden.
Die Dokumentation zu Propel findet ihr hier.
Anbei noch ein kleines Beispiel:
$test = new ExampleQuery::create()->findPk(1); var_dump($test);
Ich empfehle euch den Artikel “ORM leicht gemacht (MVC-Anwendungen mit Propel und Zend Framework)” aus dem aktuellen PHP Magazin (Ausgabe 2.11). Dort wird alles super erklärt und es gibt gute Beispiele.