2016-05-30 81 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