我有一个带有DateField的表单,如下所示:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('started', 'date', [
'label' => 'Début',
'placeholder' => 'ex: 01/09/2007',
'widget' => 'single_text',
'format' => 'dd/MM/yyyy',
'attr' => [
'autocomplete' => 'off',
],
]);
}
当我想在页面中查看它时,会出现一个异常:
在第322行的form_div_layout.html.twig中呈现模板期间引发异常("注意:数组到字符串的转换")。
在日志中,我有以下详细信息:
在Twig_Template->displayBlock('idget_attributes',array('value'=>object(ExperienceWork),'attr'=>array('autocomplete'=>'off','placeholder'=>array
我认为Twig无法解析数组占位符,但在DateType.php源代码中,我发现这种行为无法避免。我想我做错了什么,但我不知道是什么。
首先,如果你想添加HTML5占位符,这不是你的做法。你可以通过attr数组添加它。
http://symfony.com/doc/current/reference/forms/types/form.html#attr
如果不是:
您的表单似乎需要一个占位符数组,而不是字符串。
文件:
http://symfony.com/doc/current/reference/forms/types/date.html#placeholder
您可以将元素重写为:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('started', 'date', [
'label' => 'Début',
'placeholder' => array(
'year' => '2007', 'month' => '09', 'day' => '01'
),
'widget' => 'single_text',
'format' => 'dd/MM/yyyy',
'attr' => [
'autocomplete' => 'off',
],
]);
}
也许我使用了旧版本的symfony,但我用自定义日期字段对象覆盖了setDefaultOptions(OptionsResolverInterface $resolver)
,以避免在占位符字段中返回数组,比如:
$placeholderDefault = function (Options $options) {
return $options['required'] ? null : '';
};
$placeholderNormalizer = function (Options $options, $placeholder) use ($placeholderDefault) {
if (is_array($placeholder)) {
$default = $placeholderDefault($options);
return array_merge(
array('year' => $default, 'month' => $default, 'day' => $default),
$placeholder
);
}
return $placeholder;
};
$resolver->setNormalizers(array(
'empty_value' => $placeholderNormalizer,
'placeholder' => $placeholderNormalizer,
));
我唯一替换的是$placeholderNormalizer函数中的默认返回。