渲染选择类型中的问题:数组到字符串转换

时间:2017-11-01 06:38:11

标签: laravel symfony doctrine twig

我正在尝试在表单中使用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>

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

  

在渲染模板期间抛出了异常   (&#34;数组转换为字符串&#34;)。   在form_div_layout.html.twig(第82行)

我在这里缺少什么:

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

twig :(无变化)

<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, 

它现在正在工作,但它显示下拉列表中的键而不是选项!即使我添加了“choice_as_values&#39; =&GT;是的,它没有修复,但是当我编辑表单时,选择存储在数据库中!你知道我该怎么办呢? 这是我得到的截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

这真的很奇怪而且令人困惑。如果我在“管理员”以外的选项数组的中添加任何内容,则可以正常使用!

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

但是,如果我将密钥更改为“Admin”,则会抛出(“Array to string conversion”)错误!

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

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

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