2017-08-21 2 views
0

Ich habe ein Formular, basierend auf Extbase ein Fluid in TYPO3 7.6. Jedes Mal, wenn ein Validierungsfehler in einem Feld auftritt, wird das Formular erneut angezeigt und zeigt die Validierungsfehler wie gewünscht an. Jedes Mal, wenn das Formular erneut angezeigt wird und ein Wert in das Datumsfeld eingegeben wurde, wird die Fehlermeldung htmlspecialchars() expects parameter 1 to be string, object given angezeigt.TYPO3 7.6 Extbase/Fluid form: htmlspecialchars() erwartet Parameter 1 als String, Objekt als gegeben

Ich möchte diese Fehlermeldung loswerden.

Der Controller verfügt über ein Datum Eigenschaft darin:

<?php 

namespace Vendor\Extension\Domain\Model; 

class Person extends BaseDto 
{ 
    /** 
    * @var \DateTime $privatePersonBirthdate 
    */ 
    protected $privatePersonBirthdate; 

    /** 
    * @param \DateTime $privatePersonBirthdate 
    */ 
    public function setPrivatePersonBirthdate($privatePersonBirthdate) 
    { 
     $this->privatePersonBirthdate = $privatePersonBirthdate; 
    } 

    /** 
    * @return \DateTime 
    */ 
    public function getPrivatePersonBirthdate() 
    { 
     return $this->privatePersonBirthdate; 
    } 

} 

Vorlage:

<f:form.textfield property="privatePersonBirthdate" /> 

Property Konfiguration in der Steuerung:

$conf->forProperty('privatePersonBirthdate')->setTypeConverterOption('TYPO3\\CMS\\Extbase\\Property\\TypeConverter\\DateTimeConverter', \TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT, 'd.m.Y'); 

ich bereits einige ähnliche Berichte online zu finden, wie https://forge.typo3.org/issues/4268.

dieses Problem umgehen, den Wert Attribut funktionieren würde, sondern zerstört auch den Wert der Benutzer das Formular auf Validierungsfehler eingegeben:

<f:form.textfield property="privatePersonBirthdate" value="{f:format.date(date: person.privatePersonBirthdate, format: 'd.m.Y')}" /> 

Ich scheint, wie etwas fehlt. Das vestehe ich nicht. Haben Sie eine Idee, wie Sie dieses Problem lösen können?

+0

Die Option 'features.rewrittenPropertyMapper' seit TYPO3 wurde 7 entfernt, so hat dies keine Auswirkung auf dein Problem. Wo initialisieren Sie die Eigenschaftskonfiguration? Bitte stellen Sie sicher, dass Sie es nur für die 'initializeSaveAction' verwenden. – derhansen

+0

Danke für den Hinweis zum' features.rewrittenPropertyMapper'. Ich initialisiere die Eigenschaftskonfiguration sowohl in der InitializeFormAction- als auch in der InitializeSaveAction-Aktion. Wenn ich es nur in 'initializeSaveAction' mache, verschwindet zwar der Fehler, aber das Datum, das ich vorher eingegeben habe, wird im Formularfeld bei Validierungsfehlern nicht angezeigt. –

Antwort

0

Ich löste das Problem einen View Helfer zu schaffen, die die Eigenschaft des Typs umwandelt DateTime bevor Sie versuchen, es zu machen:

<?php 

namespace Vendor\Extension\ViewHelpers; 

use TYPO3\CMS\Fluid\ViewHelpers\Form\TextfieldViewHelper; 

/** 
* This view helper solves the issue described https://stackoverflow.com/questions/45792891/typo3-7-6-extbase-fluid-form-htmlspecialchars-expects-parameter-1-to-be-str 
* 
* Class TextfieldForDatesViewHelper 
* @package Educo\Eddaylight\ViewHelpers 
*/ 
class TextfieldForDatesViewHelper extends TextfieldViewHelper 
{ 
    /** 
    * Initialize the arguments. 
    * 
    * @return void 
    * @api 
    */ 
    public function initializeArguments() 
    { 
     parent::initializeArguments(); 
     $this->registerTagAttribute(self::DATEFORMAT, 'string', 'Required format for date field'); 
    } 

    /** 
    * Converts an arbitrary value to a plain value 
    * 
    * @param mixed $value The value to convert 
    * @return mixed 
    */ 
    protected function convertToPlainValue($value) 
    { 
     if ($value instanceof \DateTime) { 
      return $value->format($this->arguments[self::DATEFORMAT]); 
     } 
     return parent::convertToPlainValue($value); 
    } 

    const DATEFORMAT = 'dateFormat'; 
} 
Verwandte Themen