在Symfony 5中使用DateTime约束时收到"This value must be of type string"错误是因为Symfony 5中的DateTime类型的属性默认使用了DateTimeImmutable类,而不是之前版本中的DateTime类。DateTimeImmutable类的构造函数只接受一个字符串参数,而不接受DateTime对象作为参数。
要解决这个问题,有两种方法:
use DateTimeInterface;
class YourEntity
{
private ?DateTimeInterface $date;
// getter and setter
}
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
class YourFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// other form fields
->add('date', DateTimeType::class, [
'widget' => 'single_text',
'model_timezone' => 'UTC',
'view_timezone' => 'UTC',
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => YourEntity::class,
'normalizer' => DateTimeNormalizer::class,
]);
}
}
这样配置后,在表单验证期间,DateTime对象将被转换为字符串,以满足DateTimeImmutable类的要求。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。
领取专属 10元无门槛券
手把手带您无忧上云