Contao Module Update 2.x -> 3.x

Ich möchte heute den Weg zeigen, der notwendig ist, um alte Contao Module für Version 3.x anzupassen.

Die wesentlichen Änderungen sind:

  • Namespaces
  • Autoloader

In der Version 3.x von Contao wurden php Namensräume verwendet. Dies erlaubt vereinfacht gesagt, gleiche Methodennamen in unterschiedlichen Namensräumen. Das soll hier aber jetzt nicht weiter thematisiert werden. Ihr solltet euch definitiv damit beschäftigen, da es in fast jedem aktuellen Projekt zum Tragen kommt.

Der Autoloader kümmert sich darum, dass die Namensräume, die Klassendateien und die Templates geladen werden. Die notwendigen Dateien kann uns Contao in der Version > 3.1 erstellen. Dazu gibt es ein Backendmodul.

Kommen wir nun zu den eigentlichen Änderungen im Modul.

Fangen wir mit den Namespaces an. In jeder unserer PHP Dateien fügen wir unseren Namespace ein. Da wir das hier nur Beispielhaft durchgehen, reicht uns ein Namespace. Er sollte nicht von einem anderen Modul schon verwendet werden. Es hat sich eigentlich bewährt mit einem Autorenpräfix anzufangen. Für meine Entwicklungen verwende ich „bh_“. Anschließend kommt die Bezeichnung des Moduls. Haben wir nun also eine fixe Erweiterung „Votes“, so würde der Namensraum hier

namespace bh_votes;

heißen. Diese Anweisung muss die Erste in einer Datei sein. Erlaubt ist also folgendes:

Nicht erlaubt ist hingegen:

oder

Nun nachdem wir unseren Namensraum gewählt haben, tragen wir diesen in jede PHP Datei ein. Das erspart uns bei Methoden aufrufen in unseren Klassen den Namensraum erneut angeben zu müssen, da alle Klassen bei unserem kleinen Modul im gleichen Namensraum zu finden sind.

In der Regel erweitern zumindest ein Teil unserer Klassen die Contao Klassen, z.B. die Klasse Modul bei einem Frontendmodul.

Hatten wir in Contao 2.x dies noch wie folgt getan, ist hier nun die Angabe des Namensraums wichtig.

Vorher:

class Votes extends Module{ 
...

Neu:

class Votes extends \Module{
...

Ja aber wo ist denn nun der Namensraum?
Ganz einfach, da der Contaonamespace „\Contao“ ja ehh unser Namensraum-„root“ ist können wir uns das \Contao vor \Module sparen.

Wir verweisen also nun mit dem Backslash in unseren Klassen auf den jeweiligen Namensraum.

Weitere Änderungen können im Code von nöten sein. So z.B. wenn auf Contaoeigene Methoden zugegriffen werden soll.
Z.B. wenn wir ein neues FE-Template Objekt erstellen wollen:
vorher:

new FrontendTemplate()

jetzt:

new \FrontendTemplate()

oder wenn wir auf GET-Parameter zugreifen wollen:
vorher:

$this->Input->get("vote");

nachher:

\Environment::get('ip');

Wir sehen also, es hat sich unter der Haube auch noch ein wenig anderes verändert. Alle Änderungen hier auf zu zählen würde aber den Artikel sprengen. Dafür gibt es auf der Contao Webseite eine gute Dokumentation.
Wenn diese Anpassungen gemacht worden sind, sollte das Modul wieder lauffähig sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.