Das SiteKit verfügt über einen eigenen Autoloader. Die Konfiguration dafür befindet sich i.d.R. in /php/autoload.config.php, welche über /php/bootstrap.php mit der folgenden Anweisung geladen wird
<?php
$context->addAutoloader(array(
$module->getId() => $module->getDir() . '/php/autoload.config.php'
));
In autoload.config.php erfolgt dann ein Mapping eines Prefix auf ein Verzeichnis welches wie folgt aussehen kann
<?php
return array(
array(
'prefixes' => array('SP\EventsCalendar')
'dir' => __DIR__,
)
);
Composer Abhängigkeiten hinzufügen
Angenommen wir brauchen eine Composer-Paket für die Formatierung von Telefonnummer. Auf der Webseite https://packagist.org findet man ein Überblick über die Composer-Pakete. Anschlißend für man den Befehl “composer require” im jeweiligen IES-Module aus, dieser könnte so aussehen: “composer require giggsey/libphonenumber-for-php”. Jetzt liegen die nötigen Bibliotheken in dem “vendor”-Ordner. Damit die Bibliotheken auch auf dem Webserver landen müssen diese mit in das Module verpackt werden. Dies geschieht mittels Maven und der “pom.xml”, hier zu muss folgender Code hinzugefügt werden:
<build>
<plugins>
...
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
...
<execution>
<id>copy-composer-dependency-libphonenumber-for-php</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${basedir}/vendor/giggsey/libphonenumber-for-php/src</directory>
</resource>
</resources>
<outputDirectory>${project.build.directory}/generated-sources/publish/vendor/giggsey/libphonenumber/libphonenumber/</outputDirectory>
</configuration>
</execution>
...
</executions>
</plugin>
...
</plugins>
</build>
Hierbei ist es wichtig das der Pfad für den Autoloader “normalisiert” wird. Der Inhalt des Source-Ordners (${basedir}/vendor/giggsey/libphonenumber-for-php/src) wird beim Bauprozess in das Modul (${project.build.directory}/generated-sources/publish/vendor/giggsey/libphonenumber/libphonenumber/) kopiert. Die Fast-Regel hierfür ist: die ersteln beiden Ordner (giggsey/libphonenumber) müssen immer übernommen werden, anschließend muss geprüft werden ob das namespace passt. Dazu ist ein Blick in den Source-Code nötig - einfach eine Klasse öffnen und nachschauen welcher namespace eingetragen ist. In diesem Fall lautet der namespace “libphonenumber” - unter /vendor/giggsey/libphonenumber-for-php/src gibt es aber keinen Ordner der ein namespace darstellt, also legen wird diesen Ordner an und verschieben die Sourcen dahin. vom Composer Paketnamen abgeleitet vom namespace abgeleitet ↓ ↓ Ziel-Pfad: “/giggsey/libphonenumber/” + “libphonenumber”
Zusammen gefasst: wir kopieren die Sourcen von “${basedir}/vendor/giggsey/libphonenumber-for-php/src” nach “${project.build.directory}/generated-sources/publish/vendor/giggsey/libphonenumber/libphonenumber/”
Nun sollte zu Testzwecken das IES-Module gebaut werden und geprüft ob die Composer-Abhängigkeiten. Dazu das frisch gebaute Module entpacken und die Sourcen sollten unter “WEB-INF\publish\vendor” gefunden werden.
Dannach muss ein Eintrag in der “autoload.config.php” gemacht werden. In diesem Fall sieht die autoload.config.php so aus:
<?php
return array(
array(
'dir' => __DIR__,
'prefixes' => array('SP\EventsCalendar')
),
array(
'prefixes' => array('libphonenumber'),
'dir' => __DIR__ . '/../vendor/giggsey/libphonenumber/'
)
);
Nun das Module einspielen und schon sollte die Lib benutzbar sein.