[TYPO3-german] TCEForms - Im Backendmodul ein Formular auf Basis der TCA generieren und manuell verarbeiten.

Robin Kemna Kemna.Robin at gmail.com
Fri Nov 3 12:03:25 CET 2017


Umgebung:
TYPO3: v.8.7.4
Webserver: Apache
PHP: 7.0.24

Da ich vorsehe je nach Situation Daten über eine API oder über die normale Datenbank zu pflegen (Anlegen/Bearbeiten), möchte ich ein einheitliches Formular im eigenst dafür entwickelten BE-Modul ausgeben, welches zudem über die TYPO3 Nutzerberechtigungen manipuliert werden kann.

Dazu bin ich derweil hergegangen und habe aus der bestehenden TCA ein Formular generiert. Bei diesem vorgehen, werden die Benutzerrechte direkt mit berücksichtigt und ich muss das Userhandling nicht neu behandeln.

        $nodeFactory = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(NodeFactory::class);
        $formResultCompiler = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(FormResultCompiler::class);
        $formDataGroup = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(TcaDatabaseRecord::class);
        $formDataCompiler = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
        $formDataCompilerInput = [
            'tableName' => '{tabellen_name}',
            'command' => $command,
        ];
        $formData = $formDataCompiler->compile($formDataCompilerInput);
       $formData['renderType'] = 'outerWrapContainer';
        $formResult = $nodeFactory->create($formData)->render();
        $formResultCompiler->mergeResult($formResult);
        $this->view->assign('form',$formResult);

Beim Absenden des Formulars werden die eingegebenen Daten allerdings nicht mit verschickt.
Das liegt daran, dass das erzeugte Formular keine name Attribute innerhalb des HTMLs setzt, sondern data-name Attribute, in denen der jeweilige Parameter für das name Attribut steht. - merkwürdig aber macht TYPO3 so.

Um das ganze also beim absenden zu konvertieren müsste eigentlich nur noch das TYPO3/CMS/Backend/FormEngine AMD-Modul geladen werden. Dies ist übrigens auch für die anderen JavaScript Features (Kalender, WYSIWYG Editor etc...) verantwortlich, welche ebenfalls nicht funktionieren. Dabei habe ich festgestellt, dass im Response von der Methode "render" keine AMD Module oder etwa andere JavaScript Pfade/Definitionen mitgegeben werden. - Was eigentlich der fall sein sollte. Entsprechend werden auch keine der benötigten Module geladen.

Anscheinend gibt es hier also einen Fehler in der NodeFactory / Auflösung der Nodes, in denen die jeweils benötigten AMD-Module hinzugefügt werden sollten oder ich habe hier noch etwas vergessen..

Wenn sich bereits jemand damit beschäftigt hat, oder mir helfen möchte.. ich bin für Hinweise und Lösungsansätze offen..
Wenn noch Fragen offen sind.. immer her damit.




More information about the TYPO3-german mailing list