【发布时间】:2020-01-28 19:01:57
【问题描述】:
我在 Symfony 将 DateTime 转换为字符串时遇到了一些问题。我使用 DataTransformer 来格式化我的日期时间,但在表单中,有一个错误说:“这个值应该是字符串类型”。
这是我的代码: 我的实体:Shift.php(仅必要)
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime(message="La date de début doit être au format DateTime")
*/
private $start_at;
我的 ShiftType :
$builder
->add('start_at', TextType::class, ['attr' => [ 'class' => 'dateTimePicker']])
->add('end_at', TextType::class, ['attr' => [ 'class' => 'dateTimePicker']])
->add('has_eat')
->add('break_duration')
->add('comment')
;
$builder->get('start_at')->addModelTransformer($this->transformer);
$builder->get('end_at')->addModelTransformer($this->transformer);
还有我的 DataTransformer:
/**
* @param DateTime|null $datetime
* @return string
*/
public function transform($datetime)
{
if ($datetime === null)
{
return '';
}
return $datetime->format('Y-m-d H:i');
}
/**
* @param string $dateString
* @return Datetime|null
*/
public function reverseTransform($dateString)
{
if (!$dateString)
{
throw new TransformationFailedException('Pas de date(string) passé');
return;
}
$date = \Datetime::createFromFormat('Y-m-d H:i', $dateString);
if($date === false){
throw new TransformationFailedException("Le format n'est pas le bon (fonction reverseTransform)" . "$dateString");
}
return $date;
}
正如我所说,当我要提交表单时,表单有错误。 它说“这个值应该是字符串类型。”它是由以下原因引起的:
Symfony\Component\Validator\ConstraintViolation {#1107 ▼
root: Symfony\Component\Form\Form {#678 …}
path: "data.start_at"
value: DateTime @1578465000 {#745 ▶}
}
有些东西磨损了,当我想编辑班次时,Symfony 从数据库中获取日期并将其转换为没有错误消息的字符串。但是因为我想保存编辑,我遇到了同样的问题
你能帮帮我吗? 谢谢
【问题讨论】:
标签: symfony bootstrap-datetimepicker data-transform