Zum Inhalt springen

Zugriff auf einzelnes Feld einer Form bei mehreren Form-Arguments

Erstellt am 5. Oktober 2014 · 2 Antworten · letzte Antwort am 8. Oktober 2014

Tags: Fluid, Frage

Dschungel-Tiger ·

Hallo,
ich habe einen View, in dem mir 4 verschiedene Objekte zur Verfügung stehen. Innerhalb dieses Views gibt es genau ein Formular, dass dem Objekt fee zugewiesen ist. In diesem Formular gibt es u.a. ein Textfield für ein Datum (paymentDeadline), das für die Zahlungsfrist verwendet wird und vom Benutzer geändert werden kann. Das Formular selbst soll mir beim Submitten jedoch wieder alle 4 Objekte durchreichen.

Ich kämpfe jetzt jedoch mit folgendem Problem: Wenn ich versuche, das Formular zu submitten, schlägt der Validator natürlich zu, da das Textfield für das Datum mir einen String weiterreicht, das Attribut selbst im Model jedoch als DateTime angelegt ist. Jetzt wollte ich mittels PropertyMapper in der initializeAction auf das Argument paymentDeadline zugreifen und es vorher entsprechend umwandeln. Über die Funktion ...getArgumentNames bekomme ich auch Zugriff auf alle vier Objekte (inkl. fee), aber irgendwie nicht auf das untergeordnete Attribut fee.paymentDate, um es konvertieren zu können.

Hat jemand einen Tipp?

<f:form action="editForEnergyFiBu" controller="User" name="fee" object="{fee}" arguments="{currentLoggedInUser:currentLoggedInUser, user:user, certification:certification, fee:fee}" additionalAttributes="{role:'form'}">

...

<td><f:form.textfield property="paymentDeadline" name="paymentDeadline" value="{fee.paymentDeadline->f:format.date(format:'d.m.Y')}" /></td>

...

<f:form.submit value="{f:translate(id:'tx_wta_domain_model_wtautility.save')}" />
</f:form>
    public function initializeEditForEnergyFiBuAction() {
        // Convert date string into DateTime format
        \TYPO3\CMS\Core\Utility\GeneralUtility::devLog('Debug-Message', 'Debugger', $severity=2, $this->arguments->getArgumentNames()); // Result: 4 names, incl. argument fee

        if(isset($this->arguments['fee']['paymentDeadline'])) {
            $this->arguments['fee']['paymentDeadline']
                ->getPropertyMappingConfiguration()
                ->forProperty('fee.paymentDeadline')
                ->setTypeConverterOption('TYPO3\\CMS\\Extbase\\Property\\TypeConverter\\DateTimeConverter',
                    \TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT, 'd.m.Y');
        }
}
jenses ·

Die einzigen Fehler, die ich in deiner initialize-Action entdecken kann,
sind "$this->arguments['fee']['paymentDeadline']" statt "$this->arguments['paymentDeadline']"
in Zeile 5 und 6
und "forProperty('fee.paymentDeadline')" statt "forProperty('paymentDeadline')"
in Zeile 8.

Dschungel-Tiger ·

Leider hat mir das noch nicht richtig geholfen. Ich habe ja 4 Haupt-Objekte im View, von denen eines fee heißt und mit dem Formular im View verknüpft ist. Auf alle vier Objekte habe ich mittels $this->arguments['...'] auch Zugriff. Also z.B. auf $this->arguments['fee']. Wenn ich jetzt aber ein Attribut von fee mittels PropertyMapper ändern muss, dann komme ich da mit this->arguments['paymentDeadline'] so direkt einfach nicht ran. Und $this->arguments['fee']['paymentDeadline'] oder $this->arguments['fee.paymentDeadline']funktioniert leider auch nicht. #angry#

Hat jemand noch eine zündende Idee?