2016-05-30 39 views
0

我已经创建了一个处理对象的简单表单person并且此对象拥有属性birthDate它是datetime类型的。如何在TYPO3中存储datetime属性?

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

日期“%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

我工作的例子之一,可能会帮助你。

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日期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); 
} 
+0

THX您的回复,我已经使用了类似的话。一个字符串属性处理表单字段和验证后,我存储并将此字符串转换为第二个日期时间属性。 – Fox