Composer für PHP-Entwickler
Diese Seite richtet sich an PHP-Entwickler, die eine Abhängigkeit hinzufügen, eine Erweiterung paketieren oder die
Wurzel-composer.json lesen. Exponential wird mit Composer aus Packagist installiert, ist aber kein PSR-4-Projekt von
Composer: Composer installiert die Erweiterungen und die Bibliotheken, und die eigenen Klassen-Maps des Kernels laden die
Klassen.
Inhalt
- Die Wurzel-composer.json
- Wie Erweiterungen installiert werden
- Die Entwicklungswerkzeuge
- Die composer.json einer Erweiterung
- Versionseinschränkungen
- Regeln
Die Wurzel-composer.json
| Teil | Enthält |
|---|---|
name, type | se7enxweb/exponential, Typ ezpublish-legacy |
license | GPL-2.0-or-later |
require php | ^8.0 || ^8.1 || ... || ^8.5 (und vorausschauende Bereiche bis 8.8) |
require ext-* | dom, libxml, mbstring, pcre, json, iconv, reflection, session, spl, simplexml |
require Pakete | das Installer-Plugin, Velocity (se7enxweb/exponential-velocity), die mitgelieferten se7enxweb/*-Erweiterungen, die Bibliotheken des Kernels se7enxweb/expcomponents-* (die expcomponents, seit 6.0.15 der Fork der Zeta Components durch Exponential) |
require-dev | phpunit/phpunit (^9.6 || ^10.5 || ^11.5 || ^12.0 || ^13.4) |
suggest | Datenbankerweiterungen (ext-sqlite3, ext-pgsql, ext-mysqli, mongodb/mongodb), ext-gd, ext-curl, optionale Erweiterungen |
autoload | files: autoload.php, sodass der Autoloader von Composer den des Kernels lädt |
scripts | legacy-scripts führt nach install und update @php bin/php/ezpgenerateautoloads.php aus |
Wie Erweiterungen installiert werden
Pakete vom Typ ezpublish-legacy-extension werden vom Installer-Plugin se7enxweb/exponential-legacy-installer, das
config.allow-plugins erlaubt, nach extension/<name>/ gelegt (nicht nach vendor/). Nach der Installation generiert
der Hook legacy-scripts die Klassen-Maps neu, sodass die Klassen der Erweiterung gefunden werden. Bibliotheken
(se7enxweb/expcomponents-*, mongodb/mongodb) kommen nach vendor/ und werden vom eigenen Autoloader von Composer geladen.
Die Entwicklungswerkzeuge
PHP_CodeSniffer, PHPCompatibility und PHPStan stehen nicht im require-dev der Wurzel. Sie liegen in
composer.dev.json, aufgelöst für PHP 8.0.30 und von make devtools nach .devtools/vendor installiert
(COMPOSER=composer.dev.json composer install), sodass sie das vendor/ der Site nie berühren
(Git-Hooks und make-Ziele).
Die composer.json einer Erweiterung
{
"name": "acme/acmereport",
"description": "Monthly reports for Exponential",
"type": "ezpublish-legacy-extension",
"license": "GPL-2.0-or-later",
"require": {
"php": "^8.0",
"se7enxweb/exponential-legacy-installer": "*"
}
}typesorgt dafür, dass der Installer sie nachextension/legt; der Verzeichnisname ist der Teil des Paketnamens nach dem/, sofernextra.ezpublish-legacy-extension-namekeinen anderen nennt (LegacyExtensionInstaller::getInstallPath()).- Geben Sie
php^8.0an, sofern Sie nicht mehr brauchen (Unterstützte PHP-Versionen: 8.0 bis 8.5). - Geben Sie die Bibliotheken an, die Ihr Code verwendet; liefern Sie kein
vendor/innerhalb der Erweiterung aus. - Halten Sie die Versionen in
ezinfo.phpundextension.xmlgleich dem Release (composer.json für Erweiterungen, Composer-Pakete und Packagist).
Versionseinschränkungen
Exponential-Pakete verwenden drei- und vierteilige Versionen (6.0.15, 0.0.4.54). Die Tilde lässt die letzte Stelle
offen:
| Einschränkung | Erlaubt |
|---|---|
~6.0.15 | >=6.0.15 <6.1.0 |
~0.0.4.57 | >=0.0.4.57 <0.0.5.0 |
^8.0 | >=8.0 <9.0 |
Nach .9 kommt an der letzten Stelle .10 (0.0.4.9, 0.0.4.10). Packagist vergleicht jede Stelle als Zahl; eine
einfache lexikalische Sortierung von Tags tut das nicht, verwenden Sie also sort -V oder
git tag --sort=version:refname, wenn ein Skript das neueste Tag auswählt
(Regeln für Versionen).
Regeln
- Eine veröffentlichte Version ändert sich nie. Ein Tag auf Packagist wird einmal gelesen und zwischengespeichert; beheben Sie einen Fehler mit der nächsten Version (Tags sind dauerhaft).
- Prüfen Sie Packagist, bevor Sie neu pinnen. Der PHPUnit-Job der CI löst Abhängigkeiten frisch auf; eine Einschränkung, die auf ein Release zeigt, das noch nicht auf Packagist ist, lässt jeden Zweig fehlschlagen.
- Bearbeiten Sie
vendor/nicht, und seien Sie vorsichtig mitcomposer updateauf einer installierten Site: Manche Installationen halten Erweiterungen als lebendige Git-Checkouts, die Composer ersetzen würde.
Verwandte Seiten
- PHP-, PHP-FIG- und Composer-Standards
- composer.json modernisieren
- Der Packagist-Webhook
- 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.