Exponential für Softwareingenieure
Diese Seite richtet sich an Ingenieure, die das ganze System in einer Ansicht brauchen, bevor sie die Details lesen. Sie ist für Menschen jeder Sprachherkunft geschrieben: Wo Exponential etwas anders macht als die Frameworks, die Sie vielleicht kennen, sagt die Seite das. Jede Zeile nennt die Datei oder das Dokument, das maßgeblich ist.
Inhalt
- Der Stack
- Was für ein System es ist
- Wo es sich von anderen Frameworks unterscheidet
- Einschränkungen, die Sie übernehmen
- Wo die Wahrheit liegt
Der Stack
| Thema | Was Exponential verwendet | Quelle |
|---|---|---|
| Sprache | PHP 8.0 bis 8.5 (PHP 7.4 ohne Support nutzbar) ("php": "^7.4 || ... || ^8.8") | composer.json |
| Pakete | Composer; das Hauptpaket ist se7enxweb/exponential, Typ ezpublish-legacy | composer.json |
| Lizenz | GNU GPL, Version 2 oder später | LICENSE, composer.json |
| Datenbanken | SQLite 3 (Standard), PostgreSQL, MongoDB, MariaDB, Oracle, MySQL | Datenbankunterstützung |
| Konfiguration | INI-Dateien, über eZINI gelesen und in fester Reihenfolge zusammengeführt | Siteaccesses und Konfiguration |
| Templates | eine eigene Template-Sprache (.tpl), von eZTemplate zu PHP kompiliert | Die Template-Engine und die Design-Kette |
| Server | Apache oder nginx mit PHP-FPM, Exponential Velocity (Engine qbix), FrankenPHP | Anwendungsserver |
| Tests | PHPUnit (phpunit.xml), die meisten Suiten ohne Datenbank | Teststrategie |
| Statische Prüfungen | PHPStan Stufe 1 mit einer Baseline, PHP_CodeSniffer mit eigenen Sniffs des Projekts | Statische Analyse und Codestil |
| CI | GitHub Actions: Quality, PHPUnit, Performance, CI health | CI-Gates |
Was für ein System es ist
- Ein Inhalts-Repository mit einem Anwendungs-Framework drumherum. Im Zentrum steht ein Inhaltsmodell, das Administratoren zur Laufzeit festlegen (Inhaltsklassen mit typisierten Attributen), versionierte Objekte und ein Baum von Platzierungen. Der meiste Code, den Sie schreiben, liest oder ändert dieses Modell (Das Inhaltsmodell für Ingenieure).
- Ein modularer Monolith. Eine Installation ist eine PHP-Anwendung: Kernel, Bibliotheken und Erweiterungen laufen im selben Prozess und teilen eine Datenbank. Erweiterungen sind Verzeichnisse, keine Dienste.
- Konfigurationsgesteuert. Module, Datentypen, Workflow-Events, Template-Operatoren, Cronjob-Teile, Caches und Handler werden alle über INI-Einstellungen gefunden; die meisten Erweiterungspunkte bestehen also darin, "eine Zeile in eine Einstellungsdatei und eine Klasse in Ihre Erweiterung zu schreiben" (Events, Erweiterungspunkte und Plugins).
- Zuerst serverseitig gerendert, API-fähig. Seiten werden von Templates gerendert; JSON-Endpunkte (ezjscore), eine
REST-API (
ezprestapi) und entfernte Dienste gibt es für Headless und Apps (API-Design).
Wo es sich von anderen Frameworks unterscheidet
| Sie erwarten vielleicht | In Exponential |
|---|---|
| Überall PSR-4-Namensräume | Der Kernel behält seine Klassennamen (eZContentObject, eZINI) und eine erzeugte Klassenzuordnung; neuerer Code verwendet das Präfix exp und für die ausführbaren Klassen Namensräume wie Exponential\Runnable |
| Eine Routendatei | Modul- und View-Definitionen in module.php, URL-Aliase in der Datenbank, Siteaccess-Zuordnung aus site.ini |
| Ein ORM mit Migrationen | eZPersistentObject (eine Klasse je Tabelle, ein Array definition()) und SQL-Update-Dateien je Treiber, von Hand angewendet |
| Umgebungsvariablen für die Konfiguration | INI-Dateien in einer Kaskade; umgebungsspezifische Einstellungen werden unterstützt (Umgebungseinstellungen) |
| Twig oder Blade | die Template-Sprache von Exponential mit Operatoren, Funktionen und Fetch-Funktionen; Symfony und Twig nur über die Legacy Bridge |
| Typdeklarationen | Der Kernel-Stil verbietet skalare und Rückgabe-Typdeklarationen von PHP 7+, weil der Code auf PHP 8.0 laufen und seine Signaturen behalten muss (Codestil) |
Einschränkungen, die Sie übernehmen
- Das älteste unterstützte PHP ist 8.0. Die CI prüft jede PHP-Datei mit PHP 8.0 und startet den Kernel darauf; keine Syntax und keine Funktion neuer als 8.0 ohne Absicherung (CI-Gates).
- Bezeichner werden nicht umbenannt. Vorhandene Klassen, Tabellen, Einstellungen und Pfade
eZ*undezp*bleiben; neuer Code verwendetexp(Regeln zu Schichtung und Benennung). - Langlebige Worker. Code muss in einem Prozess sicher sein, der viele Anfragen bedient (Nebenläufigkeit, Statics und langlebige Prozesse).
- Sechs Datenbanken. Kernel-Code darf sich ohne Rückfall nicht auf die Funktionen eines einzelnen Treibers verlassen (Portables SQL schreiben).
- Dauerhafte Releases. Tags und Releases sind unveränderlich (Versionsnummern und unveränderliche Tags).
Wo die Wahrheit liegt
| Frage | Dokument |
|---|---|
| Wie ist der Kernel gebaut? | Kernel-Architektur |
| Welche Schicht darf welche aufrufen? | Regeln zu Schichtung und Benennung |
| Was ist ein Bruch, wie wird veröffentlicht und bereitgestellt? | Kompatibilität, Releases und Bereitstellung |
| Wie werden Commits und Releases gemacht? | Versionsverwaltung und Releases |
| Welche Muster verwendet der Code? | Katalog der Entwurfsmuster |
| Was hat sich in einem Release geändert? | Changelog 6.0.15 und die Upgrade-Hinweise in doc/eng-us/bc/6.0/ |
Verwandte Seiten
- Softwareingenieure: hier beginnen
- Architekturüberblick
- Exponential bewerten
- PHP-Entwickler: hier beginnen, Erweiterungsentwicklung und Anwendungsentwickler: hier beginnen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.