我相信将DateTimeType分为两个字段时发现错误。我无法通过表单验证。有人可以指出我是否缺少某些内容或复制吗?
这是我的alertType.php中的一个片段
->add('from', DateTimeType::class,[
'date_widget'=>'single_text',
'time_widget'=>'single_text',
// date and time error, whole date string provided
'date_format'=>'MM/dd/yyyy hh:mm a',
'input'=>'string',
'attr'=>['class'=>'js-datetime-input'],
'html5'=>false,
'required'=>true,
])
->add('till', DateTimeType::class,[
'date_widget'=>'single_text',
'time_widget'=>'single_text',
'input'=>'string',
// just date string provided, error only on time
'date_format'=>'MM/dd/yyyy',
'attr'=>['class'=>'js-datetime-input'],
'html5'=>false,
'required'=>true,
])
这是来自探查器的图像,显示由于日期和时间的分割,出现了两个错误,从一个错误一直到直到。
我的form.html.twig
{{ form_start(alertForm) }}
{{ form_row(alertForm.type) }}
{{ form_row(alertForm.text) }}
{{ form_row(alertForm.from) }}
{{ form_row(alertForm.till) }}
<button type="submit" class="btn btn-success btn-block">Save</button>
{{ form_end(alertForm) }}
此表显示,如果在耕种上提供日期部分,我只会收到错误消息。我相信两个字段都分开时会出现问题。
答案 0 :(得分:0)
您能否尝试使用format
代替data_format
:https://symfony.com/doc/current/reference/forms/types/date.html#reference-forms-type-date-format
答案 1 :(得分:0)
我找到了一个解决方案,尽管似乎有点破破烂烂
问题在于,当您将DateTimeType分为两个字段时,由于TimeType没有格式选项,因此format选项不再起作用,它仅接受24小时格式。
使用12小时格式拆分DateTimeType的解决方案是在日期类型的输入之间拆分输入,并将时间使用DateTimeType输入,以使用DateTimeType提供的格式选项。
这是我的formBuilder中的一个片段
->add('fromDate',DateType::class,array(
'format'=>'MM/dd/yyyy',
'widget'=>'single_text',
'attr'=>['class'=>'js-datepicker','placeholder'=>'mm/dd/yyyy'],
'required'=>true
))
->add('fromTime',DateTimeType::class,[
'widget'=>'single_text',
'format'=>'hh:mm a',
'attr'=>['class'=>'js-timepicker','placeholder'=>'type or use picker, hh:mm am'],
'required'=>true
])
->add('tillDate',DateType::class,array(
'format'=>'MM/dd/yyyy',
'widget'=>'single_text',
'attr'=>['class'=>'js-datepicker','placeholder'=>'mm/dd/yyyy'],
'required'=>true
))
->add('tillTime',DateTimeType::class,[
'widget'=>'single_text',
'format'=>'hh:mm a',
'attr'=>['class'=>'js-timepicker','placeholder'=>'type or use picker, hh:mm am'],
'required'=>true
])
然后在控制器中,您将合并两个DateTime对象并设置实体的值。
$fromDate = $form->get('fromDate')->getData();
$fromTime = $form->get('fromTime')->getData();
$tillDate = $form->get('tillDate')->getData();
$tillTime = $form->get('tillTime')->getData();
$mergeFrom = new \DateTime($fromDate->format('m/d/Y').' '.$fromTime->format('h:i a'));
$mergeTill = new \DateTime($tillDate->format('m/d/Y').' '.$tillTime->format('h:i a'));
$alert->setFrom($mergeFrom);
$alert->setTill($mergeTill);
由于我的实体仅存储单个字段,因此我们还需要在实体上使用几个额外的属性以对它们使用断言
/**
* @var \DateTime
*
*
* @ORM\Column(name="FROM_DATE", type="datetime")
*/
private $from;
/**
* @var \DateTime
*
* @Assert\Date()
*/
private $fromDate;
/**
* @var \DateTime
*
* @Assert\DateTime()
*/
private $fromTime;
希望这可以帮助希望将DateTimeTypes拆分为单独字段以供用户输入的其他任何人。