Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Autoloads und Klassen-Maps

Wie Exponential PHP-Klassen findet - die generierten Klassen-Maps für den Kernel, die Erweiterungen, Kernel-Overrides und Tests, jede Option von bin/php/ezpgenerateautoloads.php, .autoloadignore, der Autoloader von…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/php-developers/autoloads-and-class-maps.md

On this page

This page is a translation. Read the English original

Autoloads und Klassen-Maps

Diese Seite richtet sich an PHP-Entwickler, die Klassen hinzufügen, umbenennen oder verschieben. Exponential verwendet kein PSR-4. Es findet Klassen über Arrays, die jedem Klassennamen seine Datei zuordnen und durch Durchsuchen des Quellcodes erzeugt werden. Eine Klasse, die in den Arrays fehlt, existiert für die Anwendung nicht, so korrekt ihre Datei auch sein mag.

Inhalt

  1. Die Klassen-Maps
  2. Der Generator und seine Optionen
  3. Was der Generator durchsucht
  4. Kernel-Overrides
  5. Der Autoloader von Composer
  6. Wann Sie neu generieren
  7. Wenn eine Klasse nicht gefunden wird

Die Klassen-Maps

MapUmfasstGeneriert mitGeladen
autoload/ezp_kernel.phpKernel- und Bibliotheksklassen-k (Kernel-Entwickler; committet)immer
var/autoload/ezp_extension.phpKlassen der aktiven Erweiterungsverzeichnisse-ewenn sie existiert
var/autoload/ezp_override.phpdurch Erweiterungen ersetzte Kernel-Klassen-onur mit EZP_AUTOLOAD_ALLOW_KERNEL_OVERRIDE
var/autoload/ezp_tests.phpTestklassen-snur in Tests (ezpAutoloader::enableTests())

Der Autoloader in autoload.php führt sie zusammen; wenn eine Klasse in der Erweiterungs-Map und in der Kernel-Map vorkommt, steht der Eintrag der Erweiterung bei der Zusammenführung zuerst. Die Laufzeit-Maps lassen jedes tests/-Verzeichnis aus.

Der Generator und seine Optionen

php bin/php/ezpgenerateautoloads.php -e          # extensions (the one you need most)
php bin/php/ezpgenerateautoloads.php -k          # kernel (kernel developers)
php bin/php/ezpgenerateautoloads.php -o          # kernel overrides
php bin/php/ezpgenerateautoloads.php -s          # tests
php bin/php/ezpgenerateautoloads.php -e -n -v    # dry run, verbose: what would change
php bin/php/console exp:ezpgenerateautoloads -e  # the same through the console
OptionBedeutung
-e, --extensiondie Erweiterungs-Map
-k, --kerneldie Kernel-Map
-o, --kernel-overridedie Map der Kernel-Overrides
-s, --testsdie Test-Map
-n, --dry-runnichts schreiben
-v, --verbose, -p, --progressmehr Ausgabe
-t, --targetein anderes Verzeichnis für die generierte Datei
--excludeOrdner, die bei der Suche ausgelassen werden
<extension>für eine einzelne Erweiterung generieren

composer install und composer update führen den Generator danach aus ("legacy-scripts" in composer.json).

Was der Generator durchsucht

  • -e durchläuft die Erweiterungsverzeichnisse (extension/ und [ExtensionSettings] AdditionalExtensionDirectories[]) PHP-Datei für PHP-Datei und listet jede gefundene Klasse, jedes Interface und jeden Trait mit seinem Pfad auf.
  • .autoloadignore im Wurzelverzeichnis nennt Verzeichnisse, die der Generator niemals durchlaufen darf. vendor/ ist eines davon: Composer löst dessen Klassen auf, und als sie einmal in der Kernel-Map aufgeführt waren, kamen Hunderte von Klassen hinein, die niemand aktuell hielt.
  • Ein doppelter Klassenname wird gemeldet; benennen Sie eine der beiden Klassen um (Klassenbenennung und das Präfix exp).

Kernel-Overrides

Eine Erweiterung kann eine Kernel-Klasse durch ihre eigene gleichnamige Kopie ersetzen, aufgeführt in var/autoload/ezp_override.php (-o). Das ist nur aktiv, wenn config.php EZP_AUTOLOAD_ALLOW_KERNEL_OVERRIDE als true definiert (config.php-RECOMMENDED zeigt die Zeile, auskommentiert).

Das ist der schwerste Mechanismus und das letzte Mittel: Nichts registriert den Ersatz unter seinem Namen, zwei Erweiterungen, die dieselbe Klasse ersetzen, kollidieren, ohne es zu wissen, und die Kopie muss jedem Kernel-Update von Hand folgen. Bevorzugen Sie einen registrierten Erweiterungspunkt, einen durch eine Einstellung benannten Handler, einen Event-Listener oder eine Unterklasse über [RunnableSettings] Implementation[] (Kernel-Overrides, das letzte Mittel, Erweiterungspunkte aus PHP).

Der Autoloader von Composer

Bibliotheken in vendor/ (die expcomponents mit ihren ezc*-Klassen, PHPUnit, mongodb/mongodb und der Rest) werden vom eigenen Autoloader von Composer geladen, den vendor/autoload.php registriert. Eine Erweiterung, die eine Bibliothek braucht, gibt sie in ihrer eigenen composer.json an; sie kopiert niemals vendor/ in die Erweiterung (Composer für PHP-Entwickler).

Wann Sie neu generieren

ÄnderungAusführen
eine neue, umbenannte oder verschobene Klasse in einer Erweiterung-e
eine Erweiterung aktiviert oder hinzugefügt-e
eine neue Kernel-Klasse-k, und committen Sie autoload/ezp_kernel.php
ein neuer Kernel-Override-o
eine neue Testklasse-s
unter Velocityexp:velocity deploy (--kernel für eine Kernel-Klasse): generiert neu und startet dann die Worker neu, die die Map behalten, mit der sie gestartet sind

Wenn eine Klasse nicht gefunden wird

SymptomUrsacheLösung
Class "acmeReportService" not foundMap nicht neu generiertezpgenerateautoloads.php -e
funktioniert auf der Kommandozeile, schlägt im Web fehldie Worker des Webservers sind gestartet, bevor es die Klasse gabPHP-FPM neu laden oder exp:velocity deploy
eine Einstellung nennt eine Klasse, und Seiten brechendie Einstellung ging live, bevor die Klasse bereitgestellt warzuerst den Code bereitstellen; class_exists(), wo eine fehlende Klasse keine Seite brechen darf
der Generator meldet ein Duplikatzwei Dateien deklarieren die Klasseeine umbenennen
eine Klasse in tests/ wird zur Laufzeit nicht gefundenLaufzeit-Maps lassen tests/ ausverschieben Sie sie aus tests/ heraus

Verwandte Seiten

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.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x