繁体   English   中英

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM