Facebook
Twitter
Google+
Kommentare
0

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.

Über den Autor

devtalk

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen