Hallo zusammen,
ich habe mich versucht ein wenig in den Composer in Verbindung mit Contao einzuarbeiten und es kommen mir dabei ein paar Fragen auf. Vielleicht könnt ihr mir auf die Sprünge helfen. Zunächst mal die Ausgangslage:
Die Eigenschaften die Composer als Dependency Manager mitbringt habe ich so verstanden: In den composer.json-Dateien werden die Abhängigkeiten mittels require angegeben. Dann wird mittels composer update bzw. initial mit composer install der Prozess angestoßen und Composer holt sich und packt die entsprechenden Ordner/Dateien in ein vendor-Verzeichnis. Dazu lassen sich neben den Abhängigkeiten auch Skripte definieren, die z.B. vor/nach Ausführung von install/update ausgeführt werden (scripts) oder Repository-Quellen hinzugefügt werden (repositories) oder...
Das sieht dann z.B. für den Contao Composer-Client (Installer) (Contao Community Alliance) so aus:
Code:
{
"name": "contao/core",
"description": "Contao Open Source CMS",
"license": "LGPL-3.0+",
"version": "3.1.4",
"type": "metapackage",
"require": {
"contao-community-alliance/composer": "dev-master@dev"
},
"scripts": {
"pre-update-cmd": "ContaoCommunityAlliance\\ComposerInstaller\\ModuleInstaller::preUpdate",
"post-update-cmd": "ContaoCommunityAlliance\\ComposerInstaller\\ModuleInstaller::postUpdate",
"post-autoload-dump": "ContaoCommunityAlliance\\ComposerInstaller\\ModuleInstaller::postAutoloadDump"
},
"config": {
"preferred-install": "dist",
"cache-dir": "cache"
},
"repositories": [
{
"type": "composer",
"url": "http://legacy-packages-via.contao-community-alliance.org/"
},
{
"type": "artifact",
"url": "packages/"
}
]
}
Soweit so gut. Ein auf den Composer aufbauender Ersatz für das ER funktioniert also vom Prinzip so: Ich will eine neue Extension, also füg ich sie zu meiner composer.json im require-Block hinzu und führe ein update aus. (Oder das ganze weniger manuell: Die Sache wird von einem Client im Contao-Backend wie der oben bereits genannte 'Composer Client' für mich erledigt. Quasi dasselbe, nur mit UI.)
Ok. Jetzt müssen noch die Klassen dem Autoloader publik gemacht werden, sonst dümpeln sie nur irgendwo im Projektverzeichnis rum. Dazu wird praktischerweise bei einem install/update eine autoload.php im vendor-Verzeichnis erstellt/geupdated. Und die muss dann irgendwo an zentraler Stelle ins Projekt, also in Contao, eingebunden werden.
Meine naive Vorstellung einer Lösung sieht z.B. so aus: Es gibt entweder ein Modul unter system/modules, indem die autoload.php vom Composer-Verzeichnis eingebunden wird. Oder die Sache passiert irgendwo in einer Config-Datei. Falls der Composer irgendwann mal zum Core gehört, passiert das ganze dann vielleicht sonstwo.
Frage 1: Unter der gewagten Annahme, dass ich das bis hier richtig verstanden habe, frage ich mich wie das beim genannten Client gedacht ist. Da wird laut Anleitung mittels symbolischem Link das composer/.../modules/!composer-Verzeichnis ins Contao-Modulverzeichnis eingebunden. But why? Soll dann Contao selbst die autoload.php finden? Oder wo passiert die Einbindung? (Mal davon abgesehen, dass ich auf einem Shared-Hosting-Angebot keine Symlinks erstellen kann und es unter Windows auch so manche Stolperstelle gibt...)
Frage 2: Was mache ich falsch? Wenn ich z.B. "bit3/contao-theme-plus": "4.2" hinzufüge, kann das Update wegen bit3/contao-theme-plus 4.2 requires ikimea/browser dev-master -> no matching package found nicht durchgeführt werden. Ich kann "ikimea/browser": "dev-master" aber problemlos händisch hinzufügen und installieren. Anderes Problem: Es wird bei der Installation/Download eine Composer\Downloader\TransportException geworfen. Ok, grade nachgeprüft, die URL zeigt ins Leere. Dann funktionieren viele Packages einfach nicht bzw. sind veraltet?
Wer kann etwas Licht ins Dunkel bringen? Ich würde mich ja schon freuen mal ein funktionierendes System/einen funktionierenden Client im Contao-Backend zum Laufen zu bringen (Randbedingung: Unter Windows und später ein lauffähiges Contao-System auf einem 0815-Shared-Hoster.). Bisher ists für mich ein ganz schöner Dschungel. Oder gibt es gar irgendwo eine versteckte Doku?
Viele Grüße
Moritz
Lesezeichen