Symfony2中的表单视图错误


Form view error in Symfony2

在Symfony2中,我有一个SelectableEmailsType,它包含SelectableEmailType的集合。这只允许我拥有一个具有多个"id/checkbox"行的表单。

当我实例化我的表单时:

$selectableEmailsModel = new SelectableEmails();
$selectableEmailModels = [];
foreach ($emailEntities as $emailEntity) {
    $selectableEmail = new SelectableEmail();
    $selectableEmail->setId($emailEntity->getId());
    $selectableEmailModels[] = $selectableEmail;
}
$selectableEmailsModel->setSelectableEmails($selectableEmailModels);
$form = $this->createForm(new SelectableEmailsType(), $selectableEmailsModel);

我得到了The form's view data is expected to be of type scalar, array or an instance of 'ArrayAccess, but is an instance of class MyProject'Bundle'EmailsBundle'Form'Model'SelectableEmail

我哪里错了?以下是我的类型和相关型号:

class SelectableEmailsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('selectableEmails', 'collection', [ 'type' => new SelectableEmailType() ]);
    }
    public function getName()
    {
        return 'selectableEmails';
    }
}
class SelectableEmailType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('id', 'text');
        $builder->add('selected', 'checkbox');
    }
    public function getName()
    {
        return 'selectableEmail';
    }
}
class SelectableEmails
{
    protected $emails;
    public function setSelectableEmails($selectableEmails)
    {
        $this->emails = $selectableEmails;
    }
    public function getSelectableEmails()
    {
        return $this->emails;
    }
}
class SelectableEmail
{
    protected $id;
    protected $selected;
    public function getId()
    {
        return $this->id;
    }
    public function setId($id)
    {
        $this->id = $id;
    }
    public function getSelected()
    {
        return $this->selected;
    }
    public function setSelected($selected)
    {
        $this->selected = (Boolean)$selected;
    }
}

您没有指定data_class属性来告诉表单映射到正确的对象。默认情况下,它需要一个数组、''ArrayAccess的实例或标量值。

因此,您应该添加以下代码:

use Symfony'Component'OptionsResolver'OptionsResolverInterface;
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'MyProject'Email'SelectableEmail',
    ));
}

查看Symfony官方网站上的更多详细信息,搜索data_class