Change Log
4.0.0
Seit dem Release von Framework 3.0 sind bereits drei Jahre vergangen. Durch mein Studium ging die Entwicklung kaum voran, abgesehen von ORM 2.0 im Rahmen meiner Bachelorarbeit. Die Sprache PHP hat sich in dieser Zeit weiterentwickelt, vor allem bezüglich Typisierung. Daher wird es Zeit für eine neue Framework-Version.
Neben einigen neuen Features ist das hauptsächliche Ziel von Framework 4.0, die Developer Experience (DX) zu verbessern, indem die Nutzung intuitiver gestaltet wird. Dafür wurden folgende Veränderungen vorgenommen.
- Typisierung von Eigenschaften, Parametern und Rückgabewerten
- Dokumentation im Code durch PHPDoc-Kommentare
- mehr statisch analysierbarer Code, weniger Magic
-> dadurch bessere Autovervollständigung in der IDE
Neue Features
- Definition von Routen in den Controllern durch das Attribut
Route
- Einbinden von Middleware in den Controllern durch das Attribut
Middleware
- Tasks zum Auslagern isolierbarer Arbeitsschritte ohne Rückgabewert
- Commands zur Verarbeitung von CLI-Requests
- Scheduler zum automatisierten Ausführen von Tasks und Commands in bestimmten Intervallen, mit nur einem Cronjob auf dem Server
- Kernels zur sauberen Trennung von HTTP-Requests und CLI-Requests. Hier werden Provider und projektweite Middleware eingebunden.
- Neues Projekt rhrz/basics für allgemeine Hilfsklassen und Funktionen, um die Arbeit mit PHP angenehmer zu machen, zum Beispiel
ArrayObject
undStringObject
. - Prototyp für ein Admin Backend, das die Entwicklung und Wartung erleichtern soll, indem es viele Informationen über Struktur, Daten und Ereignisse eines Projekts in einer GUI darstellt.
ORM 2.0
todo
Die Doku für ORM 2.0 ist noch unvollständig.
- Definition des Datenbankschemas in den Models
- Column-Klassen für die Abbildung von PHP-Typen auf SQL-Typen
- Autovervollständigung für Models durch PHPDoc-Mixins
- Model-Cache und Einzigartigkeit (eine Instanz pro
id
) - Schema Diff zeigt Unterschiede zwischen Model- und Datenbankschema
- Automatisches Erstellen der Tabellen
- Automatisches Befüllen mit zufälligen Testdaten (Seeding)
- Query Builder für Select-Statements
- Bessere Implementierung von Beziehungen
- Hierarchische Beziehungen (Baumstrukturen)
- Generic Collections
Architektonische Änderungen
- Der Boot-Vorgang des Frameworks wurde überarbeitet, wodurch der Ordner
bootstrap
wegfällt.- Die Datei
bootstrap/app.php
wird durch Kernels abgelöst. - Die Funktionen
dump
unddd
in der Dateibootstrap/helpers.php
werden durch das Projekt rhrz/basics abgelöst. Eigene Hilfsfunktionen sollten als statische Methoden der KlasseApp\Boot\Helpers
definiert werden. - Die Datei
bootstrap/routes.php
wird durch Definition der Routen in den Controllern abgelöst. - Die Datei
bootstrap/schema.php
wird durch Definition der Tabellenspalten in den Models abgelöst.
- Die Datei
- Facades wurden abgeschafft und durch statischen Zugriff ersetzt, um Autovervollständigung zu ermöglichen und Verwirrung zu vermeiden.
- Views wurden von
resources/views
zurück zuviews
verschoben, da man diesen Ordner bei der Entwicklung oft öffnen muss.
Organisatorische Änderungen
- Metaprojekte (Framework und Komponenten) liegen jetzt in GitLab in der Gruppe rz-webdev/meta. Die Projekte in der alten Gruppe rhrk-webdev werden in Zukunft deprecated.
- Anwendungsprojekte sollen nach Upgrade auf Framework 4.0 in die Gruppe rz-webdev/projects umgezogen werden.
- Composer Packages werden nicht mehr über Satis bereitgestellt, sondern über die Package Registry von GitLab. Hierzu wurde in den Metaprojekten eine Pipeline in der Datei
.gitlab-ci.yml
eingerichtet.
In aktiver Entwicklung
- Command-Funktionalität fertigstellen: Optionen, Flags, Interaktion
- Auth-Modul, das verschiedene Authentifizierungsverfahren und die Überprüfung von Rollenzugehörigkeit und Berechtigungen abstrahiert
- Datenbankbasiertes Konzept für Mehrsprachigkeit (
Translation
-Model) - Neuer Validator, bei dem die Validierungsregeln durch Methoden statt Strings definiert werden (Vorteil: Autovervollständigung)
Zukunftspläne
- Vorbereitung auf PHP 8.4 (Property Hooks und Asymmetric Visibility)
- Framework CLI mit nützlichen Befehlen für die Entwicklung und Wartung
- Weitere Features für das Admin Backend (Dashboard, Datenbank, Log-Filter, Scheduler, Queue, fehlende Übersetzungen, ...)
- Framework Hub, das zentral Informationen über Framework-Projekte sammelt und darstellt (also ein projektübergreifendes Admin Backend)
- ORM: Model-Validierung, polymorphe Beziehungen, automatische Schema-Updates, komplexe Where-Bedingungen, Aggregatsfunktionen, Bulk-Operationen, Performance-Verbesserungen
- Queue zur kontinuierlichen Abarbeitung von Tasks im Hintergrund
- Automatisches Generieren einer REST-API (Models -> Resources)
- Unterstützung moderner Frontend-Technologien (Vue, Tailwind, ...)
- Vorgefertigte Seiten-Layouts, z.B. mit responsiver Sidebar
- Vorgefertigte UI-Elemente, z.B. Formularfelder für Model-Beziehungen
- Flexiblere Form-Klasse (basierend auf Twig-Views?)
- Generieren von Breadcrumb-Navigationen