如何处理类型"时间*" (在Extension Builder中设置)在Controller和Extbase扩展的视图中

时间:2016-10-03 16:14:48

标签: typo3 extbase typo3-6.2.x

我在扩展程序构建器中创建了实体Appointment 每个Appointment都在某一天发生,并且有一个开始时间和一个结束时间 它永远不会超过一天所以我只需要一个约会 这就是为什么我在扩展构建器中将这3个属性添加到我的模型中的原因:
enter image description here

在前端创建新约会时,我现在知道如何处理日期格式但不知道如何将时间转换为拟合整数,因为扩展构建器在我的模型中设置它。 enter image description here
在尝试创建新约会时,我收到此错误:

  

尝试呼叫时发生错误   供应商\ extname \控制器\ 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);

但这是一次失败,因为它说:

  

致命错误:未定义的常量   ' TYPO3 \ CMS \ Extbase \地产\类型转换器\ IntegerConverter' in ... AppointmentController ...

我甚至检查了那条路径,IntegerConverter就在那里......
不确定我是否应该在这种情况下使用它,或者是否还有其他一些简单的方法可以做到这一点......?

并且一旦这个工作,我将如何显示它 - 目前是我正在做的日期:

{appointment.startDate->f:format.date(format:'d.m.Y')}

但是我可以用我的时间整数做到这一点吗?:

{appointment.startTime->f:format.date(format:'H:i')}

1 个答案:

答案 0 :(得分:1)

setTypeConverterOption的第二个参数不期望一个类,而是该类的常量。由于IntegerConverter没有选项,无论如何这都是毫无意义的。但这清除了其中一个错误。

您可以使用时间字段(内部处理为整数,在TCA中为eval time),但需要一些手动工作。

首先,您需要一个转换器来确定给定时间的时间戳。您可以找到示例here

然后,在initializeCreateActioninitializeUpdateAction中使用转换器将给定的DateTime从前端转换为整数以保存在DB中:

$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');

那么你应该把时间保存到整数字段。