T3 Campus T3 Campus

Jede Klasse überall in TYPO3 instanzieren

Mit diesen 3 Features kannst du jede Klasse überall in TYPO3 instanzieren. Egal, ob innerhalb oder außerhalb eines Controllers, in einer eigenen Klassen oder in einem ViewHelper.

Copy-and-paste - Vorlagen

Schlüsselwort: new

// ohne Argumente
$project = new \Slavlee\CampusFirstextension\Domain\Model\Project();

// mit Argumente
$project = new \Slavlee\CampusFirstextension\Domain\Model\Project($argument1, $argument2);

GeneralUtility::makeInstance

use TYPO3\CMS\Core\Utility\GeneralUtility;
// ohne Argumente
$project = GeneralUtility::makeInstance(\Slavlee\CampusFirstextension\Domain\Model\Project::class);

// mit Argumente
$project = GeneralUtility::makeInstance(\Slavlee\CampusFirstextension\Domain\Model\Project::class, $argument1, $argument2);

ObjectManager->get

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);

// ohne Argumente
$project = $objectManager->get(\Slavlee\CampusFirstextension\Domain\Model\Project::class);

// mit Argumente
$project = $objectManager->get(\Slavlee\CampusFirstextension\Domain\Model\Project::class, $argument1, $argument2);

Erläuterungen

Wenn du in TYPO3 eine Instanz einer Klasse bilden möchtest, dann gibt es 3 Möglichkeiten.

  1. Schlüsselwort: new
  2. GeneralUtility::makeInstance
  3. ObjectManager->get

Das Schlüsselwort: new

Das Schlüsselwort: new wird jedem PHP Programmierer ein Begriff sein. Damit lässt sich eine Instanz von einer Klasse in PHP erzeugen. Das ist gleichzeitig die standardmäßige Herangehensweise in PHP und man ist geneigt diese auch in TYPO3 anzuwenden.

$project = new \Slavlee\CampusFirstextension\Domain\Model\Project();

Es ist auch tatsächlich möglich, dieses Schlüsselwort zu verwenden. Und manchmal ist es auch sinnvoll, das Schlüsselwort: new zu verwenden. In der Regel empfehle ich dir jedoch die anderen beiden Möglichkeiten zu nutzen. Das Schlüsselwort: new solltest du nur dann verwenden, wenn du folgende Technologien von TYPO3 nicht nutzen möchtest:

  • Injection
  • anderen Autoren per XClass die Möglichkeit bieten, deine Klasse zu überschreiben
  • Annotationen von Extbase bzw. Symfony

Wenn dir diese Begriffe noch nichts sagen, dann empfehle ich dir ebenfalls nicht das Schlüsselwort: new zu verwenden.

GeneralUtility::makeInstance

Die GeneralUtility - Klasse bindet viele nützliche Funktionen, die du in der TYPO3 Extensionentwicklung nutzen kannst. Hier lohnt es sich ein Blick in die TYPO3 API zu nehmen.

Eine statische Methode von GeneralUtility ist die makeInstance - Methode:

public static function makeInstance($className, ...$constructorArguments)

Diese statische Methode erzeugt ebenfalls eine Instanz einer Klasse. Den Klassennamen gibt an im ersten Parameter mit vollständigen Namespace an. Der zweite Parameter kann genutzt werden, um eventuellen Konstruktoren Argumente mitzuliefern.

Die Aufgabe ist somit dieselbe wie beim Schlüsselwort: new. Es hat nur den großen Unterschied, dass andere Autoren per XClass deine Klasse überschreiben kann. Damit gibst du also andere Entwickler die Möglichkeit programmatischen Einfluss auf deine Extension zu nehmen. Solche Schnittstellen sind immer gerne gesehen und sollten in jeder guten Extension vorhanden sein.

ObjectManager->get($objectName, ...$constructorArguments)

Die get() - Methode ist eine öffentliche Methode, jedoch nicht statisch. Das heisst, man muss erst eine Instanz vom ObjectManager erstellen. Das geschieht in der Regel mit der GeneralUtility::makeInstance Funktion.

Der ObjectManager wird dann ebenfalls eine Instanz aus einer Klasse erstellen. Dabei bietet es alle Funktionalitäten wie die GeneralUtility::makeInstance() - Methode. Darüberhinaus hat es noch den Vorteil, dass die Injection von TYPO3 wirken.

Wenn du also unsicher bist, wie der korrekte Umgang bei Erstellung einer Instanz einer Klasse ist, dann nutze den ObjectManager. Nutze ebenfalls den ObjectManager, wenn die Klasse, die du instanzierst, Annotationen oder Methoden hat, die mit inject - beginnen.

Bereit mehr zu lernen?

Dann komme in meine TYPO3 Onlineschule

Als Mitglied des T3 Campus für TYPO3 Schulungen erhältst du eine einzigartige Lernplattform, um professionelle Webseiten mit TYPO3 zu erstellen. Egal, ob du ein Einsteiger, Umsteiger oder bereits erfahren bist – hier findest du die passenden Lernvideos für dich.

Kevin Chileong Lee

Gründer vom T3 Campus, TYPO3 Experte mit 10+ Jahren Erfahrung, TYPO3 Liebhaber.

Ich helfe dir dabei, deine Projekte in TYPO3 umzusetzen.

Insbesondere für TYPO3 Einsteiger biete ich zahlreiche kostenfreie Tutorials und kostenpflichtige Kurse rund um TYPO3 an.
Damit kannst du in wenigen Tagen auch ohne Vorkenntnisse deine erste TYPO3 Webseite erstellen und Erweiterungen programmieren.

Auf meinem YouTube-Kanal findest du viele praktische Beispiele und Videotutorials als auch allgemein Videos zu diversen TYPO3 Themen.

Neber den TYPO3 Tutorials und Kopiervorlagen, schreibe ich auch Artikel auf meinem Blog über diverse Themen und Fragen, die die meisten TYPO3 Einsteiger, haben.

Falls du ein TYPO3 Coaching suchst, dann stehe ich dir in einer 1:1 Trainingssession zur Verfügung.

Wenn du auf dem Laufenden sein möchtest über meine Projekte, dann abonniere den Newsletter.