我遇到了一个问题,到目前为止我没有找到真正的解决方案。 这是我需要的:
我的学说模型中有一个数组字段,应该存储以下信息:
[
[
'name'=>'John Doe',
'email'=>'john@doe.com',
],
[
'name'=>'Jake Doe',
'email'=>'jake@doe.com',
],
]
我在代码中添加了以下类型:
<?php
declare(strict_types=1);
namespace App\Form\Component;
use Symfony\Component\Config\Definition\Builder\BuilderAwareInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Class EmailType
* @package MjrOne\Form\Component
*/
class EmailType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'name',
TextType::class,
[
'required'=>true,
]
)->add(
'email',
TextType::class,
[
'required'=>true,
]
);
}
}
我在代码中添加了以下构建表单:
->add(
'toReceiver',
CollectionType::class,
[
'entry_type'=>EmailType::class,
'allow_add'=>true,
'allow_delete'=>true,
'by_reference' => false,
'prototype' => true,
'entry_options'=>[
'required'=>true,
]
]
)
但是我只收到一个“在呈现模板期间引发了异常(“注意:数组到字符串的转换”)。错误信息。 我错过了什么? 表单内部的结构有效(我将其手动添加到数据库中,并在加载实体时对其进行了检查)。实体按预期工作(包括数据结构)。 但是交响乐确实可以按预期方式呈现。
答案 0 :(得分:0)
您报告的错误很可能仅与您的呈现策略有关,而与您上面定义的表单无关,它们看起来很合理。
<ul data-prototype="{{ form_widget(form.toReceiver.vars.prototype)|e('html_attr') }}">
{% for receiver in form.toReceiver %}
{{ form_widget(receiver) }}
{% endfor %}
</ul>
这会将每个集合项视为其自己的小部件,并将用于呈现新集合的原型放入容器的属性中。 (您可以使用JS处理创建/删除操作,如this Form Collections guide on the official Symfony docs!中所述)