dutch english
  Hauptseite Projekte Elektronik Möbelbau Rezepte Corgies Über mich
  Projekte Wandhalter Vereniging 2.0
Vereniging 2.0
Bibliotheken
Datenbank
Menüs

Bibliotheken

Bei der Entwicklung dieser Software habe ich verschiedene Bibliotheken und Werkzeuge verwendet. Als Gesamtframework kommt Symfony zum Einsatz. Zur Verbindung zwischen Symfony und der Datenbank verwende ich Propel.

Symfony

Symfony habe ich mit den folgenden Schritten eingerichtet:

  • Datei Symfony_Standard_2.1.4.tgz runtergeladen und auf dem Webserver ausgepackt.
  • Verzeichnis Symfony nach vereniging umbenennen.
  • Composer runtergeladen in das Verzeichnis vereniging: curl -s https://getcomposer.org/installer | php
  • In der Datei composer.json im Abschnitt require den Eintrag "propel/propel-bundle": "1.1.*", einfügen (Achtung, das Komma muss eingefügt werden, wenn diese Zeile in die Mitte des Abschnitts kommt, sonst gehört es hinter dem vorletzten Eintrag).
  • Auf der Kommandozeile php composer.phar update eingeben.
  • In der Datei app/config/parameters.yml die folgenden Einträge ändern bzw. hinzufügen:
    • database_host: localhost
    • database_name: vereniging
    • database_password: mein geheimes passwort
    • database_charset: UTF8
  • Die Konfiguration für Propel zur Datei app/config/config.yml hinzufügen:
    # Propel Configuration
    propel:
        path:       "%kernel.root_dir%/../vendor/propel"
        phing_path: "%kernel.root_dir%/../vendor/phing"
        dbal:
            driver:     "%database_driver%"
            user:       "%database_user%"
            password:   "%database_password%"
            dsn:        "%database_driver%:host=%database_host%;dbname=%database_name%;charset=%database_charset%"
      

Propel

Zur Verbindung mit der Datenbank kann unter Symfony Doctrine und Propel verwendet werden. Standardmäßig wird Doctrine unterstützt. Ich habe mich allerdings gegen Doctrine und für Propel entschieden, da bei den Vergleichen der beiden keiner als klarer Sieger hervorgeht (es sieht eher nach einem Glaubenskrieg aus). Einer der Vorteile von Propel ist die bessere Unterstützung durch Entwicklungsumgebungen, insbesondere eine funktionierende Autovervollständigung. Außerdem wird bei den Vergleichen oft geschrieben, dass es einfacher ist, Propel zu lernen, weil weniger "Magisches hinter den Kulissen" abläuft. Daher habe ich entschieden, Propel einzusetzen.

Werkzeuge

Eclipse

Diese gesamte Software wurde unter Eclipse PDT entwickelt.

Datenbankmodellierung

Die Datenbank habe ich mit dem graphischen Werkzeug MySQL Workbench entwickelt.

Konvertierung der Datenbank nach Propel

Propel setzt auf eine XML-Datei als Beschreibung der Datenbank. Aus dieser Datei werden sowohl die SQL-Befehle zum Erzeugen der Datenbank als auch die PHP-Objekte erzeugt. Die Datei kann von Hand erstellt werden, jedoch ist es einfacher und weniger fehlerträchtig diese automatisch aus der MySQL Workbench Datei zu erzeugen. Hierfür verwende ich den mysql-workbench-schema-exporter. Mit den folgenden Befehlen kann die Workbench-Datei in das Propel-Schema exportiert werden:

php cli/export.php --export=propel1-xml --saveconfig database.mwb

Jetzt in der export.json den Eintrag "addVendor" auf true gesetzt werden. Damit wird der Tabellentyp innoDB aus der WorkBench-Datei übernommen.

php cli/export.php --export=propel1-xml --saveconfig database.mwb

Die Datei export.json muss vorher einmal

Dies erzeugt die Datei vereniging.schema.xml, die von Propel eingelesen werden kann. Bevor Propel diese Datei verwenden kann, müssen allerdings noch ein paar Sachen geändert werden:

  • in der Zeile <database ... muss die Eigenschaft name="vereniging" umbenannt werden in name="default". (anscheinend gibt es noch ein Fehler in Symfony, wodurch der hier angegebene Name nicht für die Datenbank gilt, sondern für den Verbindungsnamen zur Datenbank, der "default" lautet wenn kein anderer Name angegeben ist).
  • in der Zeile <database ... muss der Eintrag namespace="Vereniging\BaseBundle\Model" eingefügt werden. (damit werden die php-Objektdateien in das richtige Verzeichnis abgelegt)
  • alle Einträge namespace="" müssen gelöscht werden. (damit gilt der oben angegebe Namensraum)
  • Der Eintrag "'m'" muss durch "m" ersetzt werden. (sonst wird in der SQL-Datei ein illegaler Standardwert eingetragen)
  • Hinter jeder Zeile <database ... muss eine Zeile <vendor type="mysql"><parameter name="Engine" value="InnoDB"/></vendor> eingefügt werden.
Valid XHTML 1.0 Transitional
Valid CSS!
29.12.2012 10:23u