【问题标题】:Issues in rendering choice type: Array to string conversion呈现选择类型的问题:数组到字符串的转换
【发布时间】:2017-11-01 06:38:11
【问题描述】:

我正在尝试在一个表单中创建一个带有 2 个选项(admincsr)的简单下拉列表,以便用户能够在必要时更新 role。使用文本类型时没有问题,并且可以更改和更新值(在 DB 中):

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('number', TextType::class, [
                'disabled' => true
            ])
            ->add('code')
            ->add('name')
            ->add('access_level');
    }

树枝

<div class="input-group">
    <span class="input-group-addon hidden-sm">Access Level</span>
    {{ form_widget(form.access_level) }}
</div>

但是当我将其更改为显示为下拉菜单时,它会抛出如下错误:

在渲染模板期间引发了异常 (“数组到字符串的转换”)。 在 form_div_layout.html.twig 中(第 82 行)

我在这里缺少什么:

....
->add('name')
->add('access_level', ChoiceType::class, array(
     'choices' => array(
          'admin' => 'Admin', 
          'csr' => 'CSR'),
 ) );

树枝:(没有变化)

<div class="input-group">
    <span class="input-group-addon hidden-sm">Access Level</span>
    {{ form_widget(form.access_level) }}
</div>

这里也是实体中的列类型:

/**
 * @var string
 * @ORM\Column()
 * @JMS\SerializedName("access_level")
 * @JMS\Type("string")
 */
protected $access_level;

我像这样更改了表单生成器:

->add('access_level', ChoiceType::class, array( 
        'choices' => array('admin', 'csr'), 
        'choices_as_values' => true, 

它现在正在工作,但它在下拉列表中显示键而不是选择!即使在我添加了'choices_as_values' => true 之后,它也无法修复,但是当我编辑表单时选择存储在数据库中!你知道我该如何解决吗? 这是我得到的截图:

【问题讨论】:

  • 尝试使用这个:{{ implode('',form_widget(form.access_level)) }}
  • @Deepen,什么?只是没有......
  • @Kmaj 我使用的选择与您尝试的方式相同,请检查 form_div_layout.html.twig 中的 form_widget 块
  • @Deepen,它给出了一个语法错误。
  • @habibun,感谢您的回复,我应该在 form_div_layout.html.twig 的 form_widget 块中更改什么(错误来自该文件的第 82 行)。

标签: laravel symfony doctrine twig


【解决方案1】:

这真的很奇怪和令人困惑。如果我在 choices 数组的 key 中放入“Admin”以外的任何内容,它就可以正常工作!

->add('access_level', ChoiceType::class, array(
     'choices' => array('whateveradfafafa' => 'admin', 'CSR' => 'csr'),

但是,如果我将密钥更改为“Admin”,则会引发(“数组到字符串转换”)错误!

->add('access_level', ChoiceType::class, array(
     'choices' => array('Admin' => 'admin', 'CSR' => 'csr'),

所以我通过在“admin”末尾添加一个空格来修复它!

有人知道为什么会这样吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2019-05-12
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多