[英]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.