如何在TYPO3中存储日期时间属性?

时间:2016-05-30 20:24:41

标签: datetime typo3-7.6.x

我创建了一个处理对象 person 的简单表单,此对象拥有属性为datetime的属性 birthDate

现在我想创建一个人并存储此属性,但如果我尝试提交表单,则会发生以下错误:

无法识别日期“%s”(格式为“%s”)

我已经阅读了一些线程,其中很多建议使用初始化操作来处理这个问题,但这对我不起作用。

人:

class Person extends AbstractEntity
{
    ...

    /**
     * Stores the birth date of a person
     * 
     * @var \DateTime
     * @validate NotEmpty, DateTime
     *
     */
    protected $birthDate = null;

    ...
}

流体:

<f:form action="send" method="post" enctype="multipart/form-data" name="person" object="{person}">
...
<fieldset>
    <f:render partial="FormErrors" arguments="{field: 'person.birthDate'}" />
    <label class="required">Birthdate</label>
    <f:form.textfield
        type="date"
        placeholder="dd.mm.yyyy"
        property="birthDate"
    />
</fieldset>
...
</f:form>

我的初始化操作如下所示:

public function initializeSendAction()
{
    if (isset($this->arguments['person'])) {
        $this->arguments['person']->getPropertyMappingConfiguration()->forProperty('birthDate')->setTypeConverterOption(
            'TYPO3\\CMS\\Extbase\\Property\\TypeConverter\\DateTimeConverter',
            \TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,
            'd.m.Y'
        );
    }
}

,发送动作如下:

public function sendAction(\Fox\Example\Domain\Model\Person $person)
{
    $this->personRepository->add($person);
    ...
}

所以没有什么特别的,但似乎我的自定义日期时间格式“d.m.Y”不起作用且属性是字符串类型,有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我的一个工作示例可能对您有帮助。

TCA:

'geburtsdatum' => array(
    'exclude' => 1,
    'label' => 'Geburtsdatum',
    'config' => array(
        'dbType' => 'date',
        'type' => 'input',
        'size' => 7,
        'eval' => 'date',
        'checkbox' => 0,
        'default' => '0000-00-00'
    ),
),

SQL:

  

geburtsdatum date DEFAULT'0000-00-00',

型号:

class Inquiry extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
    ...

    /**
     * geburtsdatum
     *
     * @var string
     */
    protected $geburtsdatum = NULL;

    ...
    /**
     * Returns the geburtsdatum
     *
     * @return string $geburtsdatum
     */
    public function getGeburtsdatum()
    {
        return $this->geburtsdatum;
    }

    /**
     * Sets the geburtsdatum
     *
     * @param string $geburtsdatum
     * @return void
     */
    public function setGeburtsdatum($geburtsdatum)
    {
        $this->geburtsdatum = $geburtsdatum;
    }
}

流体:

<f:form.textfield id="datepicker" placeholder="dd.mm.yyyy" property="geburtsdatum" />

控制器:

protected function initializeCreateAction(){
    $propertyMappingConfiguration = $this->arguments['newInquiry']->getPropertyMappingConfiguration();
    $propertyMappingConfiguration->allowAllProperties();
    $propertyMappingConfiguration->setTypeConverterOption('TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter', \TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED, TRUE);
}
public function createAction(\TYPO3Liebhaber\extkey\Domain\Model\Inquiry $newInquiry){
    $arguments = $this->request->getArguments();
    if($arguments['newInquiry']['geburtsdatum']){
        $geburtsdatum = date('Y-m-d',strtotime($arguments['newInquiry']['geburtsdatum']));
        $newInquiry->setGeburtsdatum($geburtsdatum);
    }
    $this->inquiryRepository->add($newInquiry);
}