Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2表单生成器预设置数据将日期时间转换为字符串日期_Php_Symfony_Datetime_Formbuilder - Fatal编程技术网

Php Symfony2表单生成器预设置数据将日期时间转换为字符串日期

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

我有一个datetime字段,我使用jquery datepicker在文本字段中选择date with (输入[类型=文本)

当我想要创建一个新记录时,没有问题。当我想要编辑该记录时,我必须将日期时间数据设置为文本日期格式(Y-m-d)并打印到文本字段

我的字段(单位:orm.yml):

我的表单生成器:

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