【问题标题】:TYPO3 7.6 Extbase / Fluid form: htmlspecialchars() expects parameter 1 to be string, object givenTYPO3 7.6 Extbase / Fluid 形式:htmlspecialchars() 期望参数 1 是字符串,给定对象
【发布时间】:2017-08-21 08:51:03
【问题描述】:

我有一个表格,基于 TYPO3 7.6 中的 Extbase an Fluid。每次在任何字段中发生验证错误时,都会根据需要再次显示表单以显示验证错误。 但每次再次显示表单并在日期字段中输入值时,都会出现错误消息htmlspecialchars() expects parameter 1 to be string, object given

我想摆脱这个错误信息。

控制器中有一个日期属性:

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

}

模板:

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

控制器中的属性配置:

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

我已经在网上找到了一些类似的报道,比如https://forge.typo3.org/issues/4268

使用 value 属性的解决方法会起作用,但也会破坏用户在验证错误时在表单中输入的值:

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

我好像少了点什么。我不明白。你知道如何解决这个问题吗?

【问题讨论】:

  • 选项 features.rewrittenPropertyMapper 自 TYPO3 7 以来已被删除,因此这对您的问题没有影响。你在哪里初始化属性配置?请确保您仅将其用于initializeSaveAction
  • 感谢features.rewrittenPropertyMapper 的提示。我在initializeFormActioninitializeSaveAction 操作中初始化了属性配置。如果我只在initializeSaveAction 中执行此操作,则错误确实会消失,但我之前输入的日期不会显示在验证错误的表单字段中。

标签: typo3 fluid extbase typo3-7.6.x


【解决方案1】:

我解决了创建视图助手的问题,该助手在尝试渲染之前转换了 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';
}

【讨论】:

    猜你喜欢
    • 2020-11-22
    • 2017-08-30
    • 2018-07-30
    • 1970-01-01
    • 2021-02-13
    • 2017-03-22
    • 2023-04-09
    • 2018-02-22
    • 2018-11-10
    相关资源
    最近更新 更多