Ich habe jetzt schon einige Male in diversen Foren gelesen, dass es Verwirrungen über die Einbindung von eigenen UserFuncs in TYPO3 8.7 gibt, daher schreibe ich schnell mal ein Beispiel wie man seine alte PHP-Datei wieder an den Start bekommt.
Falls ihr in der Vergangenheit schon einmal mit dem Gedanken gespielt habt, eure einzelnen PHP-Dateien als Extensions in euer System zu bringen, solltet ihr erneut darüber nachdenken. Extensions zu schreiben ist der bessere Weg, individuelle Funktionen in TYPO3 einzubringen.
Der eine oder andere wird feststellen, dass die ehemalige Einbindung von UserFuncs nach einem Update nicht mehr so funktioniert, wie es z.B. mit TYPO3 7.6 noch der Fall war. Das liegt daran, dass includeLibs (leider wie ich meine) von TYPO3 nicht mehr unterstützt wird.
TypoScript zuvor:
lib.doSomething = USER
lib.doSomething {
userFunc = In2code\MyUserFuncs\DoSomething->now
includeLibs = fileadmin/php/DoSomething.php
}
Hier eine mögliche Lösung wenn sich euer System im Composer Mode befindet. Hier müsst ihr über die composer.json definieren, wo sich eure eigenen UserFuncs befinden. Die Datei DoSomething.php befindet sich in dem Beispiel weiterhin unter fileadmin/php/.
TypoScript:
lib.doSomething = USER
lib.doSomething {
userFunc = In2code\MyUserFuncs\DoSomething->now
}
composer.json der ganzen Instanz:
{
"repositories": [
...
],
"require": {
"typo3/cms": "8.7.*",
...
},
"autoload": {
"psr-4": {
"In2code\\MyUserFuncs\\": "fileadmin/php"
}
}
}
Beispiel Datei mit entsprechendem Namespace:
Im Anschluss müsst ihr die Autoload-Datei über den Composer neu erstellen lassen. Das geht mit dem Befehl
composer dump-autoload
Wenn sich euer System nicht im Composer-Mode aber im Classic-Mode befindet, sehe ich aktuell nur die Möglichkeit der Einbindung über eine eigene Extension. Hierzu hat Helmut etwas verfasst: Class-Loading for extensions. Wenn ich hier falsch liege, freue ich mich natürlich über entsprechende Kommentare.
Ansonsten, Grüße aus Rosenheim 🙂
Nachtrag: Ich bin etwas erstaunt über die teilweise heftige Kritik bei Twitter. Dennoch halte ich den Beitrag für konstruktiv und hilfreich. Meine eigentliche Intension ist es, euch den Umgang mit composer schmackhaft zu machen.
Hier noch einmal explizit: Die Einbindung von zusätzlichen Funktionen in TYPO3 ist über eine eigene Extension der beste Weg ist, um technische Schulden zu vermeiden (steht aber auch oben).
PHP im fileadmin-Ordner ist im Generellen auf vielen Ebenen der falsche Ansatz (Nachhaltigkeit, Versionierbarkeit, Sicherheit, etc...)
Hier der Link zum Breaking Change: TypoScript property "includeLibs" removed