如何在 TYPO3 中存储日期时间 属性?
How can I store a datetime property in TYPO3?
我创建了一个简单的表单来处理一个对象 person 并且这个对象拥有 属性 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" 不起作用并且 属性 是字符串类型,任何有什么建议吗?
我的一个工作示例,可能会对你有所帮助。
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);
}
我创建了一个简单的表单来处理一个对象 person 并且这个对象拥有 属性 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" 不起作用并且 属性 是字符串类型,任何有什么建议吗?
我的一个工作示例,可能会对你有所帮助。
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);
}