Komponent-Modell

Das Komponenten-Modell wird mit SP\SiteKit\Instanciator.php instanziert.

Ausschlaggebend sind zwei Methoden dieser Klasse:

newInstance(…)

newInstance Kreiert die mit getClassName(…) ermittelte Klasse. Dies wird mit einer ReflectionClass gemacht. Außerdem werden implizit die Argumente zu dieser Klasse hinzugefügt.

	/**
	 * Instanziiert ein neues Objekt mit dem angegebenen Type.
	 *
	 * Optional können noch Argumente des Konstruktors angegeben werden.
	 *
	 * @param string $type Type der Instanziiert werden soll
	 * @param array $arguments Argumente, die dem Konstruktor der Klasse übergeben werden sollen.
	 * @return object|null Die neu erzeugte Instanz oder <tt>null</tt>, wenn der Type nicht zu einer
	 * 	Klasse aufgelöst werden konnte.
	 */
	public function newInstance($type, $arguments = null) {...}

	[...]

		$ref = new \ReflectionClass($className);
		if ($arguments !== null) {
			$f = $ref->newInstanceArgs($arguments);
			return $f;
		} else {
			return $ref->newInstance();
		}

	[...]

getClassName($type)

Die Methode durchsucht die Config für die mit $type übermittelten String. Drei Cases werden durchlaufen ‘einsZuEinsMapping’ ‘type.mit.Punkten’ ‘type.mit.*.in.der.Konfig’

TODO: Fälle spezifizieren und besser begründen.

	/**
	 * Liefert den Klassennamen anhand des Types
	 * @internal
	 * @param string $type
	 * @return string Klassenname der auf den Typ gemappt ist oder <tt>null</tt>, wenn für diesen Type kein
	 * 	Klassenname aufgelöst werden kann.
	 * @return string|null
	 */
	public function getClassName($type) {...}

Die Konfig

Der Instanciator holt sich seine Konfig u.a. aus ../Kundenmodul/Kundenmodul-module/src/publish/php/layout-... und ../Kundenmodul/Kundenmodul-module/src/publish/php/config/componentModel/html.php.

Die im Layout aufzurufenden Klassen werden durch die html.php spezifiziert. Überlicherweise steht im layout

<?php $this->render('html-bodyHead'); ?>

Dies wird mit html.php auf eine Komponente gemappt.

	'components' => array(

		/**
		 * Komponenten die für die Grundfunktionaltität des SiteKit notwendig sind.
		 * Alle weiteren Komponenten werden in Kunden- oder Applikations-Modulen definiert
		 */
	[...]
		'html-bodyHead' => ['type' => 'html.bodyHead'],
	[...]

TODO: Warum gibt es die Trennung von layout-content und html.php ?