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 des make: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 des make: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 der Mail::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.