在最后的日子里, 我将Symfony 4项目升级到Symfony5。大多数内容保持兼容, 并且升级起来也很容易, 但是有些事情引发了异常, 包括我的某些FormType中的错误。
包括日期字段的FormTypes引发以下异常:启用” html5″选项后, 无法使用” Symfony \ Component \ Form \ Extension \ Core \ Type \ DateType”的” format”选项。好吧, 我的DateType字段的配置中肯定没有html5选项:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// Importing DateType
use Symfony\Component\Form\Extension\Core\Type\DateType;
class TemplatesType extends AbstractType
{
// ...
public function buildForm(FormBuilderInterface $builder, array $options)
{
// This throws the exception
$builder
->add('datePublished', DateType::class, [
'widget'=>'single_text', 'format' => 'yyyy-MM-dd HH:mm', ])
;
}
// ...
}
因此, 在开始的5分钟内, 我不知道发生了什么, 以及我该怎么做才能避免出现此异常(除了更改”日期”字段的类型之外)。一段时间后, 我开始阅读Symfony 5的FormTypes文档, 并很快意识到了这一错误。
解
由于我的DateType小部件使用single_text小部件, 因此当渲染器尝试生成字段的HTML时, 如果字段的类型为single_text且html5选项为, 则我稍后可以在前端初始化基于JavaScript的Datepicker。启用(始终自动设置为true), 将引发异常。
要在FormType中解决此问题, 只需禁用html5属性, 如下所示:
$builder
->add('datePublished', DateType::class, [
// 1. Keep your single_text widget
'widget'=>'single_text', 'format' => 'yyyy-MM-dd HH:mm', // 2. Disable HTML5 option
'html5' => false
])
;
例如:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// Importing DateType
use Symfony\Component\Form\Extension\Core\Type\DateType;
class TemplatesType extends AbstractType
{
// ...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('datePublished', DateType::class, [
'widget'=>'single_text', 'format' => 'yyyy-MM-dd HH:mm', // Solution to the exception
'html5' => false
])
;
}
// ...
}
这样, 你现在应该可以在浏览器上看到你的视图, 而不会出现此异常。
编码愉快❤️!
评论前必须登录!
注册