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.

然后,在您的 initializeCreateActioninitializeUpdateAction 中使用转换器将给定的 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');

那你把时间节省到整数字段应该没问题。