php – 将DataTime字段拆分为两个字段
发布时间:2020-12-13 21:50:07 所属栏目:PHP教程 来源:网络整理
导读:我想使用Symfony 2.3将DateTime字段拆分为两个字段(日期和时间).因此,我尝试调整发现 here的Symfony 2.0解决方案,并对Symfony 2.3进行了必要的更改. 新类型: class MyDateTimeType extends AbstractType{ public function buildForm(FormBuilderInterface $
我想使用Symfony 2.3将DateTime字段拆分为两个字段(日期和时间).因此,我尝试调整发现
here的Symfony 2.0解决方案,并对Symfony 2.3进行了必要的更改.
新类型: class MyDateTimeType extends AbstractType { public function buildForm(FormBuilderInterface $builder,array $options) { $builder ->add('date','date',array( 'label' => 'label.form.date','input' => 'datetime','widget' => 'single_text','format' => 'yyyy-MM-dd','error_bubbling' => true )) ->add('time','time',array( 'label' => 'label.form.time','error_bubbling' => true )) ->addViewTransformer(new DateTimeToDateTimeArrayTransformer()); } public function getDefaultOptions(array $options) { return array( 'label' => 'label.form.date','error_bubbling' => false ); } public function getParent() { return 'form'; } public function getName() { return 'my_datetime'; } } 和DataTransformer: class DateTimeToDateTimeArrayTransformer implements DataTransformerInterface { public function transform($datetime) { if ($datetime instanceof DateTime) { $date = clone $datetime; $date->setTime(12,0); $time = clone $datetime; $time->setDate(1970,1,1); } else { $date = null; $time = null; } $result = array( 'date' => $date,'time' => $time ); return $result; } public function reverseTransform($array) { $date = $array['date']; $time = $array['time']; if(null == $date || null == $time) return null; $date->setTime($time->format('G'),$time->format('i')); return $date; } } services.yml foo.bar.form.type.my_date_time: class: FooBarFormMyDateTimeType tags: - { name: form.type,alias: my_datetime } 但是当我在这样的形式中使用类型时: $builder->add('abc','my_datetime',array( 'label' => 'ABC','data' => new DateTime(null,new DateTimeZone('UTC')) )); 我收到错误: 表单的视图数据应该是DateTime类的实例,但是我是一个(n)数组.您可以通过将“data_class”选项设置为null或通过添加将(n)数组转换为DateTime实例的视图转换器来避免此错误. 解决方法
我知道有点晚了,但我有同样的问题并解决了它.
您不需要新的表单类型来分割日期时间字段的日期和时间. 在你的形式 $builder ->add('datetime',DateTimeType::class,array( 'date_widget' => 'single_text','time_widget' => 'single_text','date_format' => 'dd.MM.yyyy','required' => true,)) : 如果你想单独渲染输入字段(例如,添加不同的类作为属性),只需在树枝模板中执行此操作 {{ form_start(form) }} .. {{ form_widget(form.datetime.date) }} {{ form_widget(form.datetime.time) }} .. {{ form_end(form) }} 在Symfony 2.6中测试,应该从2.3上升(甚至可能是2.1) 编辑:调整为Symfony 2.8及更高版本 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |