我在 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 从数据库中获取日期并将其转换为字符串,没有错误消息。但是当我想保存编辑时,我遇到了同样的问题
请问你能帮帮我吗 ?谢谢