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.