Die Frameworks und Doctrine – DooPHP

Diesmal muss ich leider selber etwas austüfteln, denn zur Einbindung in Doctrine in DooPHP findet man im dortigen Forum und auch sonst im Internet keine Tipps wie man die beiden Welten miteinander verknüpft. Ob meine Implementierung der Weisheit letzter Schluß ist, sei mal dahin gestellt. Vielleicht gibt es einen viel sinnigeren Weg als wie ich es gelöst habe, aber da ich sehen wollte, wie weit ich in DooPHP mit einer möglichst geringen Einarbeitungszeit komme, habe ich es erstmal dabei belassen. Als Basis diente das HelloWorld Beispiel aus der DooPHP Dokumentation.

  1. Das Doctrine-Paket (bzw. alles unterhalb des „lib“ Ordners im Archiv) kopiert man erstmal zu „app/protected/class/“
  2. Die von Doctrine generierten Model-Klassen habe ich nach „app/protected/model/“ kopiert.
  3. Dann kommentiert man in „app/protected/config/db.conf.php“ die Zeilen mit „$dbconfig[‚dev‘]“ (für die Verbindung in der Entwicklungsumgebung) aus und trägt dort entsprechend seine MySQL-Verbindungdaten ein. Den sechsten Wert habe ich allerdings auf „false“ gesetzt, da sonst persistente Verbindungen genutzt werden.
  4. In der index.php des „Hello World“ Skripts wird folgendes eingefügt, am besten unter der Einbindung von „common.conf.php“ und „routes.conf.php“:
    [sourcecode lang=“php“]
    include ‚./protected/config/db.conf.php‘;
    [/sourcecode]
  5. Dann fügt man am besten unter dem „Doo::conf()->set($config);“ folgende Zeilen ein:
    [sourcecode lang=“php“]
    Doo::conf()->add(‚dbconfig‘, $dbconfig[‚dev‘]);

    Doo::loadClass(‚Doctrine‘);
    spl_autoload_register(array(‚Doctrine‘, ‚autoload‘));
    spl_autoload_register(array(‚Doctrine‘, ‚modelsAutoload‘));

    $db_config = Doo::conf()->dbconfig;

    $manager = Doctrine_Manager::getInstance();
    $manager->connection(‚mysql://‘.$db_config[2].‘:‘.$db_config[3].’@‘.$db_config[0].’/‘.$db_config[1], ‚doctrine‘);
    $manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);

    Doctrine::loadModels(Doo::conf()->SITE_PATH.’protected/model/‘);
    [/sourcecode]

  6. Zuguterletzt wird der HelloController folgendermaßen umgebaut:
    [sourcecode lang=“php“]
    class HelloController extends DooController
    {
    public function index()
    {
    $medium = Doctrine_Core::getTable(‚Medium‘)->find(1);

    $this->data[‚title‘] = $medium->mName;
    $this->data[‚message‘] = ‚Hello World!‘;

    $this->view()->render(‚hello‘, $this->data);
    }
    }
    [/sourcecode]

  7. Und die Ausgabe von „title“ noch dem Template hinzugefügt:
    [sourcecode lang=“php“]

    Tonträgertitel:

    [/sourcecode]

Im Vergleich gefällt mir die Einbindung, wie sie in Kohana realisiert wird, etwas besser. Zwar erscheint es dort zunächst etwas komplizierter, weil man Doctrine quasi als Modul „registrieren“ muss, aber das ist konsistent zu den anderen Modulen in Kohana. In DooPHP wird Doctrine einfach in der index.php initialisiert und über die statischen Klassenaufrufe bzw. über das „getInstance()“ kann man sich das Objekt immer holen. Das wird allerdings unübersichtlich, sobald man erst mal mehrere solcher Klassen benötigt. Bei Kohana sind sie sauber getrennt mit ihren eigenen Initialisierungsskripten, bei DooPHP im allgemeinen Code drin. Wobei ich hier aber darauf hinweisen muss, dass ich mir im Falle von DooPHP nicht sicher bin, ob mein Ansatz der richtige ist.

Jetzt aber zum interessanten Teil: wie sieht es denn bei DooPHP im Benchmark aus, wenn Doctrine dazugeladen wurde und Datenbankabfragen gemacht werden?

  • ohne Doctrine + Datenbankabfrage: 57,14 Requests pro Sekunde
  • mit Doctrine + Datenbankabfrage: 41,03 Requests pro Sekunde

Auch hier reduziert Doctrine wieder die Performance. Aber ebenso ist auch dabei DooPHP einen kleinen Tacken schneller als Kohana. Aber nicht so deutlich, als das man sich allein aus Performancegründen dafür entscheiden würde. Ebenso wie beim Benchmark-Test von Kohana wurde hier ebenfalls kein Datencache oder andere Optimierungen genutzt.

One thought on “Die Frameworks und Doctrine – DooPHP

  1. Please Convert This Language in US English Also Because of the many people know the US English

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.