我在扩展程序构建器中创建了实体Appointment
每个Appointment
都在某一天发生,并且有一个开始时间和一个结束时间
它永远不会超过一天所以我只需要一个约会
这就是为什么我在扩展构建器中将这3个属性添加到我的模型中的原因:
在前端创建新约会时,我现在知道如何处理日期格式但不知道如何将时间转换为拟合整数,因为扩展构建器在我的模型中设置它。
在尝试创建新约会时,我收到此错误:
尝试呼叫时发生错误 供应商\ 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')}
答案 0 :(得分:1)
setTypeConverterOption
的第二个参数不期望一个类,而是该类的常量。由于IntegerConverter
没有选项,无论如何这都是毫无意义的。但这清除了其中一个错误。
您可以使用时间字段(内部处理为整数,在TCA中为eval time
),但需要一些手动工作。
首先,您需要一个转换器来确定给定时间的时间戳。您可以找到示例here。
然后,在initializeCreateAction
和initializeUpdateAction
中使用转换器将给定的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');
那么你应该把时间保存到整数字段。