2017-08-21 11 views
0

TYPO3 7.6のExtbaseに基づいてフォームを取得しました。どのフィールドでも検証エラーが発生するたびに、フォームが再度表示され、検証エラーが表示されます。 フォームが再び表示され、日付フィールドに値が入力されるたびに、エラーメッセージhtmlspecialchars() expects parameter 1 to be string, object givenが表示されます。TYPO3 7.6 Extbase/Fluidフォーム:htmlspecialchars()は、パラメータ1が文字列であることを期待しています。

私はこのエラーメッセージを取り除きたいと思います。

コントローラは、その中dateプロパティを持っています

<?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; 
    } 

} 

テンプレート:私はすでにのように、オンラインいくつかの類似したレポートを見つけ

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

:コントローラで

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

プロパティの設定https://forge.typo3.org/issues/4268

属性が仕事と値を使用して、だけでなく、ユーザーが検証エラーのフォームに入力された値を破棄し、回避策:

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

何かが欠けているように私には思えます。私はそれを取得しません。あなたはこの問題を解決する方法を知っていますか?

+0

オプションを 'features.rewrittenPropertyMapper'がTYPO3 7以降削除されているので、これが影響を与えることはありませんあなたの問題に。 プロパティ設定をどこで初期化しましたか? 'initializeSaveAction'のためだけに使用してください。 – derhansen

+0

' features.rewrittenPropertyMapper'についてのヒントをありがとう。 'initializeFormAction'アクションと' initializeSaveAction'アクションの両方でプロパティ設定を初期化します。私が 'initializeSaveAction'でのみ行うとエラーは実際には消えますが、前に入力した日付は検証エラーのフォームフィールドに表示されません。 –

答えて

0

私はそれをレンダリングしようとする前にタイプDateTimeのプロパティを変換ビューヘルパーを作成し、問題を解決:

<?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'; 
} 
関連する問題