Php Symfony2表单生成器预设置数据将日期时间转换为字符串日期
我有一个datetime字段,我使用jquery datepicker在文本字段中选择date with (输入[类型=文本) 当我想要创建一个新记录时,没有问题。当我想要编辑该记录时,我必须将日期时间数据设置为文本日期格式(Y-m-d)并打印到文本字段 我的字段(单位:orm.yml): 我的表单生成器:Php Symfony2表单生成器预设置数据将日期时间转换为字符串日期,php,symfony,datetime,formbuilder,Php,Symfony,Datetime,Formbuilder,我有一个datetime字段,我使用jquery datepicker在文本字段中选择date with (输入[类型=文本) 当我想要创建一个新记录时,没有问题。当我想要编辑该记录时,我必须将日期时间数据设置为文本日期格式(Y-m-d)并打印到文本字段 我的字段(单位:orm.yml): 我的表单生成器: $builder->add( 'releasedAt', null, [ 'label' => 'Çıkış Ta
$builder->add(
'releasedAt',
null,
[
'label' => 'Çıkış Tarihi',
'mapped' => false, // false because setting the datetime data in the controller
'attr' => ['class' => 'date-picker']
]
);
我的表单预设置数据:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$game = $event->getData();
if ($game instanceof Game) {
$datetime = $game->getReleasedAt();
$form->get('releasedAt')->setData(\Datetime::createFromFormat('Y-m-d', $datetime->format('Y-m-d')));
} else {
return;
}
});
错误:
表单的视图数据应为标量、数组或
\ArrayAccess的实例,但它是类DateTime的实例。您
可以通过将“data_class”选项设置为“DateTime”来避免此错误
或者通过添加视图转换器来转换类的实例
标量、数组或\ArrayAccess实例的日期时间
这里有什么问题
----编辑----
我也试过:
$builder->add(
'releasedAt',
'datetime',
[
'label' => 'Çıkış Tarihi',
'date_widget' => 'single_text',
'date_format'=>'y-M-d',
'attr' => ['class' => 'date-picker']
]
)
但该视图显示时间选择,并用div包装所有字段
我不想编辑datetime窗体视图
第一个选择对我来说更好
谢谢!解决方案:
解决办法很简单
当我们看这个图表时:
只需将PRE_SET_数据更改为POST_SET_数据
代码:
图中的“规范化”是什么意思?
$builder->add(
'releasedAt',
'datetime',
[
'label' => 'Çıkış Tarihi',
'date_widget' => 'single_text',
'date_format'=>'y-M-d',
'attr' => ['class' => 'date-picker']
]
)
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$game = $event->getData();
if($game === null || $game->getId() === null)
return;
if ($game instanceof Game) {
$datetime = $game->getReleasedAt();
$form->get('releasedAt')->setData($game->getReleasedAt()->format('Y-m-d'));
}
});