[Frage] UserFunc - php-Funktion aufrufen - Minimalversion funktioniert nicht TYPO3-Version: 10.4.9

  • Kesandal Kesandal
    T3PO
    0 x
    23 Beiträge
    0 Hilfreiche Beiträge
    10. 08. 2021, 01:30

    Hallo zusammen,

    ich möchte mit TypoScript eine PHP-Funktion aufrufen. Leider klappt dies überhaupt nicht. Im Frontend habe ich einfach keinerlei Ausgabe. Selbst wenn ich alles auf ein Minimum reduziere möchte es einfach nicht funktionieren.
    .
    Im Backend habe ich "Debug" aktiviert. Der Log bleibt jedoch leer.
    Meine neue Extension taucht in den Erweiterungen im Backend auf.
    .
    Das Beispiel habe ich aus der Typo3-Doku. Die Funktion habe ich in eine Extension gepackt.

    _______________________________________
    ***TypoScript auf der Hauptseite***

    page = PAGE
    page.10 = USER_INT
    page.10 {
    ..userFunc = Vendor\ExtensionName\ExampleTime->printTime
    }

    _______________________________________

    ***Ordnerstruktur der Extension:***
    typo3conf
    ..ext
    ....extension_name
    ......Classes
    ........ExampleTime.php
    ....composer.json
    ....ext_emconf.php

    ExampleTime.php
    _______________________________________
    ExampleTime.php

    <?php
    namespace Vendor\ExtensionName;
    class ExampleTime {
    ..public function printTime(string $content, array $conf): string
    ..{
    ....return 'Hello World!';
    ..}
    }
    _______________________________________

    composer.json
    {
    .."name": "vendor/extension-name",
    .."authors": [
    ....{
    ......"name": "XXX",
    ......"role": "XXX"
    ....}
    ..],
    .."type": "typo3-cms-extension",
    .."description": "TextExtension",
    .."license": "GPL-2.0-or-later",
    .."autoload": {
    ...."psr-4": {
    ......"vendor\\ExtensionName\\": "Classes/"
    ....}
    ..},
    .."require": {
    ......"typo3/cms-core": "^9.5 || ^10.4"
    ..}

    _______________________________________

    ext_emconf.php
    <?php

    $EM_CONF[$_EXTKEY] = [
    ..'title' => 'TestExtension',
    ..'description' => 'TestExtension',
    ..'category' => 'plugin',
    ..'author' => 'XXX',
    ..'author_company' => 'XXX',
    ..'author_email' => 'XXX@XXX.com',
    ..'state' => 'alpha',
    ..'clearCacheOnLoad' => true,
    ..'version' => '0.0.1',
    ..'constraints' => [
    ....'depends' => [
    ......'typo3' => '9.5.0-10.4.99',
    ....],
    ..],
    ];

    _______________________________________
    composer.json im Hauptverzeichnis - erweitert durch:

    "autoload": {
    .."psr-4": {
    ...."Vendor\\ExtensionName\\": "httpdocs/public/typo3conf/ext/extension_name/Classes"
    ..}
    }

    Anschließend habe ich ein composer dump-autoload durchgeführt.
    .
    Es wäre wirklich super wenn mir jemand von Euch einen Tipp geben könnte.
    Vielen Dank.


  • 1
  • 0 x
    3243 Beiträge
    151 Hilfreiche Beiträge
    10. 08. 2021, 20:58

    Den Eintrag für autoloading in der composer.json im hauptverzeichnis brauchts nicht. In der composer.json steht ja Deine Extension als Requirement drin, wodurch composer sich die autoloading-Infos aus der composer.json der Extension zieht.

    Ansonsten ist mit nur ein kleingeschriebener Vendorname in der composer.json der Extension aufgefallen. Evtl. aber auch nur eingeschlichen bei der Anonymisierung fürs Forum...

    Habe eben das code-Besipiel aus der Doku in einem TYPO3 v10 probiert, und es funktionierte. D.h. irgendwo muss eine Abweichung sein bzw. in Deiner Instanz etwas anders....

    Such evtl. mal in den autoloading-Dateien (vendor/composer/autoload_*.php), die composer aufbaut, ob dort Deien Klasse mit gelistet ist.

  • 1