Empfohlene Verzeichnisstruktur für Projekte

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/

Nachfolgend ist der Verwendungszweck für jedes Verzeichnis aufgeführt.

  • application/: Das Verzeichnis enthält die eigentliche Anwendung. Das wird das MVC System einschliessen, sowie Konfigurationen, verwendete Services, und die eigene Bootstrap Datei.

    • configs/: Das anwendungsweite Konfigurationsverzeichnis.

    • controllers/, models/, und views/: Diese Verzeichnisse fungieren als Standardcontroller, Modell oder View Verzeichnisse. Diese drei Verzeichnisse im Anwendungsverzeichnis zu haben bietet das beste Layout für das Starten eines einfachen Projekts sowie als Start eines modularen Projekts das globale controllers/models/views hat.

    • controllers/helpers/: Diese Verzeichnisse enthalten Action Helfer. Action Helfer haben entweder einen Namespace von "Controller_Helper_" im Standardmodul oder "<Module>_Controller_Helper" in anderen Modulen.

    • layouts/: Dieses Layout Verzeichnis ist für MVC-basierte Layouts. Da Zend_Layout in der Lage ist MVC- und nicht-MVC-basierte Layouts zu verstehen, zeigt der Ort dieses Verzeichnisses das Layouts keine 1-zu-1 beziehung zu Controllern haben und unabhängig von Templates in views/ sind.

    • modules/: Module erlauben einem Entwickler ein Set von zusammengehörenden Controllern in eine logisch organisierte Gruppe zu gruppieren. Die Struktur im Modules Verzeichnis würde die Struktur des Application Verzeichnisses haben.

    • services/: Dieses Verzeichnis ist für eigene anwendungsspezifische Web-Service Dateien, welche von der eigenen Anwendung angeboten werden, oder für die Implementierung eines Service Layers für eigene Modelle.

    • Bootstrap.php: Diese Datei ist der Eistiegspunkt für die eigene Anwendung, und sollte Zend_Application_Bootstrap_Bootstrapper implementieren. Das Ziel dieser Datei ist es, die Anwendung zu starten und Komponenten der Anwendung zur Verfügung zu stellen, indem diese initialisiert werden.

  • data/: Dieses Verzeichnis bietet einen Ort an dem Anwendungsdaten gespeichert werden, die angreifbar und möglicherweise temporär sind. Die Veränderung von Daten in diesem Verzeichnis kann dazu führen, dass die Anwendung fehlschlägt. Die Informationen in diesem Verzeichnis können, oder auch nicht, in ein Subversion Repository übertragen werden. Beispiele von Dingen in diesem Verzeichnis sind Session Dateien, Cache Dateien, SQLite Datenbanken, Logs und Indizes.

  • docs/: Dieses Verzeichnis enthält die Dokumentation, entweder erzeugt oder direkt bearbeitet.

  • library/: Dieses Verzeichnis ist für übliche Bibliotheken, von denen die Anwendung abhängt, und es sollte im include_path von PHP sein. Entwickler sollten den Bibliotheks-Code ihrer Anwendung in diesem Verzeichnis, unter einem eindeutigen Namespace platzieren, und den Richtlinien folgen, die im Handbuch von PHP unter Userland Naming Guide beschrieben sind, sowie denen, die von Zend selbst beschrieben sind. Dieses Verzeichnis kann auch das Zend Framework selbst enthalten; wenn dem so ist, würde es unter library/Zend/ platziert werden.

  • public/: Dieses Verzeichnis enthält alle öffentlichen Dateien für die eigene Anwendung. index.php konfiguriert und startet Zend_Application, welche seinerseits die Datei application/Bootstrap.php startet, was dazu führt, dass der Front Controller ausgeführt wird. Das DocumentRoot des Web Server sollte typischerweise auf dieses Verzeichnis gesetzt sein.

  • scripts/: Dieses Verzeichnis enthält Maintenance und/oder Build Skripte. Solche Skripte können Commandline, Cron oder Phing Build Skripte enthalten, die nicht wärend der Laufzeit ausgeführt werden, aber Teil für das korrekte Funktionieren der Anwendung sind.

  • temp/: Das temp/ Verzeichnis wird für vergängliche Anwendungsdaten verwendet. Diese Information würde typischerweise nicht im SVN Repository der Anwendung gespeichert werden. Wenn Daten im temp/ Verzeichnis gelöscht werden, sollten Anwendungsen dazu in der Lage sein, weiterhin zu laufen, wärend das möglicherweise die Geschwindigkeit reduziert bis die Daten wieder gespeichert oder neu gecacht sind.

  • tests/: Dieses Verzeichnis enthält Anwendungstests. Diese würden hand-geschrieben sein, PHPUnit Tests, Selenium-RC basierte Tests oder basierend auf anderen Test Frameworks. Standardmäßig kann Library Code getestet werden, indem die Verzeichnisstruktur des library/ Verzeichnisses vorgegaukelt wird. Zusätzliche funktionale Tests für die eigene Anwendung können geschrieben werden, indem die Verzeichnisstruktur von application/ vorgegaukelt wird (inklusive der Unterverzeichnisse der Anwendung).