Php 日期字段占位符attr上的数组到字符串转换异常

Php 日期字段占位符attr上的数组到字符串转换异常,php,symfony,twig,Php,Symfony,Twig,我有一个带有日期字段的表单,如下所示: public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('started', 'date', [ 'label' => 'Début', 'placeholder' => 'ex: 01/09/2007', 'widget

我有一个带有日期字段的表单,如下所示:

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行的表单_div_layout.html.twig中呈现模板(“注意:数组到字符串转换”)时引发异常

在日志中,我有以下详细信息:

在Twig_Template->displayBlock('widget_attributes',array('value'=>object(ExperienceWork),'attr'=>array('autocomplete'=>'off','placeholder'=>array('year'=>'ex:01/09/2007','day'=>'ex 01/09/2007'),[…]


我认为Twig无法解析数组占位符,但在年,我发现这种行为是无法避免的。我认为我犯了一些错误,但我不知道是什么。

首先,如果你想添加HTML5占位符,这不是你要做的。你可以通过attr数组添加它

如果没有:

看起来您的表单需要的是占位符数组,而不是字符串

文件:

您可以将元素重写为:

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',
             ],
        ]);
}

首先,如果你想添加一个HTML5占位符,这不是你怎么做的。你可以通过attr数组添加它

如果没有:

看起来您的表单需要的是占位符数组,而不是字符串

文件:

您可以将元素重写为:

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(options resolverface$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,
));

我唯一替换的是$placeholder Normalizer函数中的默认返回。

也许我使用的是旧版本的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,
));

我唯一替换的是$Placeholder Normalizer函数中的默认返回。

很抱歉,它不起作用,我有一个
Twig\u错误\u运行时:在呈现模板期间引发了异常(“注意:数组到字符串的转换”)在第322行的form_div_layout.html.twig中,占位符作为数组发送。很抱歉,它不起作用,我有一个
twig_错误\u运行时:在第322行的form_div_layout.html.twig中呈现模板(“注意:数组到字符串转换”)时引发异常,占位符作为数组发送。