Struktur & Aufbau¶
Colibri ist ideal geeignet für mittelere bis grössere Webprojekte und ist bereits mit allen notwendigen Verzeichnissen und Klassen ausgestattet. Natürlich steht es Dir frei die Struktur von Colibri jederzeit zu ändern. Hierbei gibt es Grundsätzlich keine Einschränkungen, solgange Du mithilfe des Composer-Autoloading diese Klassen selbst einbinden kannst.
Hinweis
Trotz der Freiheiten welche sich Dir hier bieten, ein Hinweis: Zu viele grundlegende Änderungen solltest Du in Deinem Projekt nicht einführen. Ansonsten erschwert dies Neulingen in Deinem Team den Einstieg.
Wo befinden sich die Models/Entitäten?¶
Viele Entwickler scheinen darüber verwirrt zu sein, dass beim Basissystem kein spezifisches Verzeichnis für Models oder Entinitäten vorgesehen ist. Wir vertreten hierbei die Meinung von Laravel und behaupten dass das Wort Model bei vielen Entwicklern unterschiedliche Bedeutung hat. Zum Beispiel finden die einen Entwickler - ein Model enthält alle Business-Logiken die gebraucht werden. Wiederum andere Entwickler verstehen unter einem Model die Beziehung zu einer Datenbank.
Aus diesen Gründen wurde das Standardverzeichnis für Eloquent Models im app/ Verzeichnis vorgesehen, dies erlaubt es den Entwicklern selbständig ein Verzeichnis zu wählen, in welchem die Models aufbewahrt werden sollen.
Hauptverzeichnis (./)¶
- Anwendungsverzeichnis
- Im Anwendungsverzeichnis (app/) werden alle Kernklassen Deiner Anwendung aufbewahrt. Wir werden dieses Verzeichnis weiter unten detailierter behandeln; für den Anfang solltest Du lediglich wissen, dass sich alle Klassen Deiner Anwendung in diesem Verzeichnis befinden.
- Bootstrap-Verzeichnis
- Innerhalb des Bootstrap-Verzeichnis (bootstrap/) befindet sich die app.php Datei welche für das Starten (Bootstraping) des Basissystems zuständig ist. Ebenfalls werden in diesem Verzeichnis auch generierte Cache Dateien, welche der Performance des Basissystems dienen, aufbewahrt.
- Konfigurationsverzeichnis
- Alle Konfigurationsdaten des Colibri Basissystems befinden sich im Konfigurationsverzeichnis (config/). Jeder dieser Konfigurationsdateien ist mithilfe von DocBlock Kommentaren dokumentiert und sollte als Deine erste Anflaufstelle zum Gesammtüberblick des Basissystems dienen.
- Datenbank-Verzeichnis
- Im Datenbank-Verzeichnis (database/) befinden sich Datenbank spezifieschen Dateien wie bspw. Migration oder Seedings. Unter Umständen wird dieses Verzeichnis auch zur Bereitstellung von SQLite Datenbanken genutzt.
- Public-Verzeichnis
Das Public-Verzeichnis (public/) enthält alle öffentlich abrufbaren Dateien. Neben der Front-Controller Datei (index.php) sind dies Grafiken, CSS und JavaScript Dateien.
- Assets-Verzeichnis
- Im Assets-Verzeichnis (public/assets/) befinden sich öffentliche Grafiken, CSS und JavaScript Dateien des Basissystems.
- Resourcen-Verzeichnis
- Das Resourcen-Verzeichnis (resources/) beinhaltet die Views, sowie Rohdateien welche bspw. mithilfe des Asset-Manager’s kompliert werden. Hierzu gehören Dateien wie SASS für die Generierung von Stylesheets oder ES6 JavaScript Komponenten.
- Route-Verzeichnis
- Im Route-Verzeichnis (routes/) wird das sogenannte Mapping aller bekannten URL’s für die Controller oder zur direkten Ausgabe definiert. Im Regelfall werden diese Aufgaben in verschidene Dateien ausgelagert. Mehr zum Thema Routing findest Du jedoch unter: Routing.
- Sammel-Verzeichnis
Das Sammel-Verzeichnis (storage/) beinhaltet Deine kompilierten Blade-Templates, dateibasierte Sessiondaten, Caching Dateien sowie andere Dateien welche durch das Basissystem generiert werden.
- Anwendungsspeicher-Verzeichnis
- Im Anwendungspeicher-Verzeichnis (storage/app/) werden alle generierten Dateien des Basissystems aufbewahrt. Eine Idee dieses Verzeichnis richtig zu Nutzen ist bspw. das storage/app/public/ Unterverzeichnis anzulegen. Darin können Sie öffentliche Dateien hinterlegen welche mithilfe des Basissystems generiert wurden, bspw. Avatare oder ähnliches. Damit Colibri weiss dass Du diese Dateien öffentlich zur Verfügung stellen möchtest, solltest Du einen Symobllink unter public/storage anlegen, welcher auf dieses Verzeichnis verweist. Einen solchen Link kannst Du mithilfe des php artisan storage:link Kommandos zuweisen.
- Frameworkspeicher-Verzeichnis
- Im Frameworkspeicher-Verzeichnis (storage/framework/) befinden sich alle Dateien welche durch das Laravel PHP Framework generiert wurden. Hierzu gehören auch die generierten Cache Dateien des Laravel PHP Framework’s.
- Protokoll-Verzeichnis
- Im Protokoll-Verzeichnis (storage/logs/) werden alle generieten Protokolle des Basissystems, des Frameworks oder des Servers hinterlegt, sofern alle Konfigurationen korrekt gesetzt wurden.
- Testverzeichnis
- Wie der Name bereits Vermuten lässt, handelt es sich beim Testverzeichnis (tests/) um den Aufbewahrungsort für Funktions, HTTP, Browser Tests des Basissystems. Colibri stellt Dir dabei einen grundlegenden Test zur Verfügung, welcher zugleich als Orientierungspunkt verwendet werden kann.
- Vendor-Verzeichnis
- Das Vendor-Verzeichnis (vendor/) ist für alle Fremdmodule gedacht, die Du in Deiner Anwendung einsetzt. Das wichtigste Fremdmodul ist das Laravel PHP-Framework, welches das Fundament von Colibri setzt.
- Node-Verzeichnis
- Ein weiteres Verzeichnis welches Abhängigkeiten innerhalb des Basissystems aufbewahrt ist das Modul-Verzeichnis (node_modules/). In diesem Verzeichnis werden alle Abhängigkeiten aus der package.json Datei installiert.
Anwendungsverzeichnis (app/)¶
Im Anwendungsverzeichnis befinden sich die wichtigsten Dateien des Basissystems.
Der Standard Namespace welcher innerhalb dieses Verzeichnisses verwendet wird ist
App
und wird mithilfe des Composer und dem PSR4-Standard Autoloading
automatisch ins Basissystem geladen.
Tipp
Vieler dieser Klassen innerhalb des app/ Verzeichnisses, können mithilfe von
Artisan Kommandos generiert werden. Um eine Liste mit möglichen Befehlen zum
generieren von Dateien im Anwendungsverzeichnis, zu erhalten nutze den
php artisan list make
Artisan Befehl.
- Konsolenverzeichnis
- Im Konsolenverzeichnis (app/Console/) werden all Deine Artisan Kommandos definiert.
Ein neues Artisan Kommando kannst Du bspw. mithilfe des
make:command
Artisan Befehls generieren. In diesem Verzeichnis befindet sich der Konsolen-Kernel welcher zum registrieren der Artisan Kommandos und cron-jobs verwendet wird. - Eventsverzeichnis
- Das Eventsverzeichnis (app/Events/) existiert nicht gleich zu beginn. Es sollte
mithilfe des
event:generate
oder desmake:event
Artisan Kommandos generiert werden. Dieses Verzeichnis beinhaltet die Klassen für Aufgaben & Events. Events werden zum informieren von weiteren Bestandteilen des Basissystems verwendet falls ein bestimmter Event eintrifft, dies ermöglicht ein flexibles coden mit der Möglichkeit Klassen untereinander zu entkoppeln. - Exception-Verzeichnis
- Das Exception-Verzeichnis (app/Exceptions/) beinhaltet die Exception-Handler Klasse, welche zum behandeln von Fehlern eingesetzt wird, sowie verschiedene Exception-Klassen die Du selber generieren kannst. Falls Du die Fehlerbehandlung anpassen möchtest, kannst Du dies in der Handler Klasse in diesem Verzeichnis tun.
- HTTP-Verzeichnis
- Im HTTP-Verzeichnis (app/Http/) befinden sich Deine Controller, Middlewares und Form-Requests. Eigentlich alles was zum bearbeiten von Anfragen benötigt wird.
- Aufgabenverzeichnis
- Das Aufgabenverzeichnis (app/Jobs/) existiert nicht gleich zu Beginn. Es sollte
mithilfe des
make:job
Artisan Kommandos generiert werden. Dieses Verzeichnis beinhaltet alle Aufgaben innerhalb einer Wartenschlange. Aufgaben können dabei einzeln abgearbeitet werden oder synchron mit der Anfrage vearbeitet werden. Aufgaben welche synchron mit der Anfrage verarbeitet werden, können auch als Kommandos deklariert werden da diese dem Kommando-Entwurfsmuster folgen. - Listener-Verzeichnis
- Das Listener-Verzeichnis (app/Listeners/) existiert nicht gleich zu Beginn. Es sollte mithilfe des
event:generate
oder desmake:listener
Artisan Kommandos generiert werden. Dieses Verzeichnis beinhaltet die Klassen welche zum berarbeiten der Aufgaben & Events verwendet werden. Ein Listener wartet bis ein Event innerhalb der Anwendung ausgelöst wird und bestimmt dabei das weitere Verfahren mit diesem Event. Als Beispiel könnte somit eine E-Mail an einen Benutzer zugestellt werden ohne dass die E-Mail selbst im Benutzer-Model definiert werden muss. - Mail-Verzeichnis
- Das Mail-Verzeichnis (app/Mail/) existiert nicht gleich zu Beginn. Es sollte
mithilfe des
make:mail
Artisan Kommandos generiert werden. Dieses Verzeichnis beinhaltet alle Deine Mail-Klassen welche Du innerhalb der Anwendung versenden möchtest. Mail-Objekte erlauben es Dir Logiken und Inhalte von E-Mails in eine eigene Klasse zu extrahieren, welche Du dann mithilfe derMail::send
Methode versenden kannst. - Nachrichten-Verzeichnis (Notifications)
- Das Nachrichten-Verzeichnis (app/Notifications/) existiert nicht gleich zu Beginn. Es sollte
mithilfe des
make:notification
Artisan Kommandos generiert werden. In diesem Verzeichnis befinden sich Klassen welche für verschiedene Nachrichtendienste eingesetzt werden können um die Benutzer über einen Event zu informieren. Dabei stehen Dir eine Vielzahl an Treibern zur Verfügung, um Deine Nachricht zu verbreiten: E-Mail, Slack, SMS oder speichern in der Datenbank. - Zugriff-Verzeichnis (Policies)
- Das Zugriff-Verzeichnis (app/Policies/) existiert nicht gleich zu Beginn. Es
sollte mithilfe des
make:policy
Artisan Kommandos generiert werden. In diesem Verzeichnis befinden sich die Zugriff (Policy) Klassen der Anwendung. Mithilfe von Policies kannst Du den Zugriff auf eine bestimmte Resource abhängig von den Benutzern steuern, mehr zu diesem Thema findest Du unter: Autorisierung. - Provider-Verzeichnis
Im Provider-Verzeichnis (app/Providers/) befinden sich alle Service Provider Klassen des Basissystems. Mitihilfe von Service-Providern werden alle Abhängigkeiten innerhalb des Basissystems aufgelöst, alle Events werden registiert und alles was für den Betrieb des Basissystems notwendig ist wird darin vorbereitet.
Bei einer Neuinstallation von Colibri findest Du bereits einige solcher Service-Provider Klassen welche für den Betrieb des Systems benötigt werden. Fühl Dich wie zuhause und versuche Deine eigene Services in Dein Basissystem zu integrieren damit Du Zugriff auf all Deine Objekte erhälst.
- Validierungsverzeichnis
- Das Validierungsverzeichnis (app/Rules/) existiert nicht gleich zu Beginn. Es
sollte mithilfe des
make:rule
Artisan Kommandos generiert werden. In diesem Verzeichnis befinden sich Deine eigenen Validierungsregeln. Damit kannst Du die Logiken welche zur Validierung benötigt werden in ein eigenes Objekt auslagern, mehr Informationen zu diesem Thema findest Du unter: Validierung.