T3SEO

TYPO3 and SEO since 2011

TYPO3 Extensions und Namespaces

Die im Herbst erscheinende Version 6.0 von TYPO3 bringt vor allem unter der Haube für Entwickler einige Neuerungen mit sich. Da jetzt alle PHP-Klassen in Namespaces überführt wurden und der Großteil der Klassen nebenbei noch umbenannt und in andere Verzeichnisse verschoben wurde, bleibt kaum ein Stein auf dem anderen.

Wie nutze ich Namespaces in meiner TYPO3-Extension?

Um es vorweg zu sagen: Die dramatischsten Codeänderungen, sind zum jetzigen Zeitpunkt gerade einmal 2 Wochen her und das Core Team ist noch ziemlich beschäftigt einige Fehler zu beseitigen, die sich mit der Umstellung eingeschlichen haben. So weit ich das beurteilen kann, geht das schon in eine gute Richtung, aber es ist noch nicht ausgeschlossen, dass sich bis zum Release von TYPO3 6.0 noch grundlegende Dinge an der Klassenstruktur ändern oder die ganze Migration wieder rückgängig gemacht wird.

Der aktuelle Stand ist, dass alle Klassen des Core in System Extensions ausgelagert wurden und unter dem Namespace \TYPO3\CMS\ExtensionName geführt werden, wobei der ExtensionName, die UpperCamelCase-Variante des Extension-Keys sein muss. Die Klasse CssStyledContentController in typo3/sysext/css_styled_content/Classes/Controller/CssStyledContentController.php liegt also im Namespace \TYPO3\CMS\CssStyledContent\Controller.

Für alle übrigen Extensions gilt, dass der Namespace \Vendor\ExtensionName sein muss. Der Vendor-Namespace bezieht sich auf den Herausgeber der Software und kann sich beispielsweise aus dem Namen des Entwicklers, einem github-Account oder einem Firmen- oder Organisationsnamen ableiten.
Beispiel: Der ProductController, der in EXT:my_shop/Classes/Controller/ProductController.php untergebracht ist, liegt also im Namespace \MyCompany\MyShop\Controller.

Der Autoloader löst die mit Namespaces versehenen Klassennamen wie folgt auf:

  • Beginnt der Namespace mit \TYPO3\CMS ist das dritte Segment der ExtensionName
  • Andernfalls ist das zweite Segment der ExtensionName
  • Aus dem ExtensionName lässt sich der Extension Key und damit der Pfad zur Extension ableiten
  • Die restlichen Namespace-Segmente geben die Ordnerstruktur (innerhalb des Classes-Ordner der Extension) wieder

Hinweis: Das Autoloading funktioniert zwar technisch, wenn man in einer eigenen Extension den \TYPO3\CMS Namespace verwendet, aber dieser Namespace ist wirklich nur für den Core gedacht. Für eigene Extensions sollte auf jeden Fall die Variante mit dem Vendor-Namespace genutzt werden.

TYPO3 Extensions und Namespaces