Extbase扩展的Controller和View中type "Time*"(在Extension Builder中设置)如何处理
How to deal with type "Time*" (set in the Extension Builder) in Controller and View of Extbase extension
我在我的扩展构建器中创建了实体 Appointment
。
每个 Appointment
都在某一天发生,并且有开始时间和结束时间。
它永远不会超过一天,所以我只需要一个约会。
这就是为什么我在扩展构建器中将这 3 个属性添加到我的模型中:
在前端创建新约会时,我现在知道如何处理日期格式,但不知道如何将时间转换为合适的整数,因为扩展构建器在我的模型中设置了它。
尝试创建新约会时出现此错误:
An error occurred while trying to call
vendor\extname\Controller\AppointmentController->createAction()
newAppointment.startTime:
"09:35" is no integer.
The given subject was NULL.
newAppointment.endTime:
"10:35" is no integer.
在我的控制器中,我有这个适用于日期的函数:
public function initializeAction() {
if ($this->arguments->hasArgument('newAppointment')) {
$this->arguments->getArgument('newAppointment')->getPropertyMappingConfiguration()->forProperty('startDate')->setTypeConverterOption('TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter',\TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,'d.m.Y');
}
}
我尝试添加:
$this->arguments->getArgument('newAppointment')->getPropertyMappingConfiguration()->forProperty('startTime')->setTypeConverterOption('TYPO3\CMS\Extbase\Property\TypeConverter\IntegerConverter',\TYPO3\CMS\Extbase\Property\TypeConverter\IntegerConverter);
但正如它所说的那样,这是一个失败:
Fatal error: Undefined constant
'TYPO3\CMS\Extbase\Property\TypeConverter\IntegerConverter' in ...AppointmentController...
我什至检查了那个路径并且 IntegerConverter 在那里...
不确定我是否应该在这种情况下使用它,或者是否有其他一些简单的方法可以做到这一点...?
此外,一旦成功,我将如何显示它 - 目前是我正在做的日期:
{appointment.startDate->f:format.date(format:'d.m.Y')}
但是我可以用我的时间整数来做到这一点吗?:
{appointment.startTime->f:format.date(format:'H:i')}
setTypeConverterOption
的第二个参数不期望 class,而是来自此 class 的常量。由于 IntegerConverter
没有选项,所以这无论如何都是没有意义的。但这清除了其中一个错误。
您可以使用时间字段(内部处理为整数,在 TCA 中 eval time
),但需要一些手动工作。
首先你需要一个转换器来确定给定时间的时间戳。你可以找到一个例子 here.
然后,在您的 initializeCreateAction
和 initializeUpdateAction
中使用转换器将给定的 DateTime 从前端转换为要保存在数据库中的整数:
$propertyMappingConfiguration->forProperty('fromTime')->setTypeConverter($this->objectManager->get('My\Extension\Property\TypeConverter\TimestampConverter'))->setTypeConverterOption('My\Extension\Property\TypeConverter\TimestampConverter', \My\Extension\Property\TypeConverter\TimestampConverter::CONFIGURATION_DATE_FORMAT, 'H:i');
那你把时间节省到整数字段应该没问题。
我在我的扩展构建器中创建了实体 Appointment
。
每个 Appointment
都在某一天发生,并且有开始时间和结束时间。
它永远不会超过一天,所以我只需要一个约会。
这就是为什么我在扩展构建器中将这 3 个属性添加到我的模型中:
在前端创建新约会时,我现在知道如何处理日期格式,但不知道如何将时间转换为合适的整数,因为扩展构建器在我的模型中设置了它。
尝试创建新约会时出现此错误:
An error occurred while trying to call vendor\extname\Controller\AppointmentController->createAction()
newAppointment.startTime: "09:35" is no integer. The given subject was NULL. newAppointment.endTime: "10:35" is no integer.
在我的控制器中,我有这个适用于日期的函数:
public function initializeAction() {
if ($this->arguments->hasArgument('newAppointment')) {
$this->arguments->getArgument('newAppointment')->getPropertyMappingConfiguration()->forProperty('startDate')->setTypeConverterOption('TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter',\TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,'d.m.Y');
}
}
我尝试添加:
$this->arguments->getArgument('newAppointment')->getPropertyMappingConfiguration()->forProperty('startTime')->setTypeConverterOption('TYPO3\CMS\Extbase\Property\TypeConverter\IntegerConverter',\TYPO3\CMS\Extbase\Property\TypeConverter\IntegerConverter);
但正如它所说的那样,这是一个失败:
Fatal error: Undefined constant 'TYPO3\CMS\Extbase\Property\TypeConverter\IntegerConverter' in ...AppointmentController...
我什至检查了那个路径并且 IntegerConverter 在那里...
不确定我是否应该在这种情况下使用它,或者是否有其他一些简单的方法可以做到这一点...?
此外,一旦成功,我将如何显示它 - 目前是我正在做的日期:
{appointment.startDate->f:format.date(format:'d.m.Y')}
但是我可以用我的时间整数来做到这一点吗?:
{appointment.startTime->f:format.date(format:'H:i')}
setTypeConverterOption
的第二个参数不期望 class,而是来自此 class 的常量。由于 IntegerConverter
没有选项,所以这无论如何都是没有意义的。但这清除了其中一个错误。
您可以使用时间字段(内部处理为整数,在 TCA 中 eval time
),但需要一些手动工作。
首先你需要一个转换器来确定给定时间的时间戳。你可以找到一个例子 here.
然后,在您的 initializeCreateAction
和 initializeUpdateAction
中使用转换器将给定的 DateTime 从前端转换为要保存在数据库中的整数:
$propertyMappingConfiguration->forProperty('fromTime')->setTypeConverter($this->objectManager->get('My\Extension\Property\TypeConverter\TimestampConverter'))->setTypeConverterOption('My\Extension\Property\TypeConverter\TimestampConverter', \My\Extension\Property\TypeConverter\TimestampConverter::CONFIGURATION_DATE_FORMAT, 'H:i');
那你把时间节省到整数字段应该没问题。