Dav*_*cia 8 php symfony-forms symfony
我正在尝试采用一种表单类型并显示它,但是我需要用户一次上传补丁上传.所以说上传30个文件,页面上有30个表格.我收到此错误:
表单的视图数据应该是标量,数组或\ ArrayAccess的实例,但是类MS\CoreBundle\Entity\Photo的实例.您可以通过将"data_class"选项设置为"MS\CoreBundle\Entity\Photo"或通过添加视图转换器来避免此错误,该转换器将类MS\CoreBundle\Entity\Photo的实例转换为标量,数组或\的实例ArrayAccess接口.
图库类型代码是:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('photo', 'collection', array(
'type' => new PhotoType(),
'allow_add' => true,
'data_class' => 'MS\CoreBundle\Entity\Photo',
'prototype' => true,
'by_reference' => false,
));
}
Run Code Online (Sandbox Code Playgroud)
照片类型代码是:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('description', 'text', array('label' => "Title:", 'required' => true))
->add('File')
->add('album', 'entity', array(
'class' => 'MSCoreBundle:Album',
'property' => 'title',
'required' => true,
'query_builder' => function(EntityRepository $er)
{
return $er->createQueryBuilder('a')
->orderBy('a.title', 'ASC');
},
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MS\CoreBundle\Entity\Photo',
));
}
Run Code Online (Sandbox Code Playgroud)
我的控制器功能是:
public function newAction($count)
{
for($i = 1; $i <= $count; $i++) {
$entity = new Photo();
}
$form = $this->container->get('ms_core.gallery.form');
$form->setData($entity);
return array(
'entity' => $entity,
'form' => $form->createView()
);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒.
MDr*_*tte 11
您不应将data_class选项传递给GalleryType中的集合类型.或者,如果您想要覆盖PhotoType的默认值(已经设置,那么您不必这样做),您可以在options数组中指定它,如下所示:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('photo', 'collection', array(
'type' => new PhotoType(),
'allow_add' => true,
'options' => array('data_class' => 'MS\CoreBundle\Entity\Photo'),
'prototype' => true,
'by_reference' => false,
));
}
Run Code Online (Sandbox Code Playgroud)
确保你做有一个默认data_class在您的"GalleryType",它应该是一个相册设置选项,它似乎.
此外,在您的控制器中,您没有正确创建表单.您需要setData()使用表单的数据类型进行调用,在本例中为Album.
public function newAction($count)
{
$album = new Album();
for($i = 1; $i <= $count; $i++) {
$album->addPhoto(new Photo());
}
$form = $this->container->get('ms_core.gallery.form');
$form->setData($album);
return array(
'entity' => $album,
'form' => $form->createView()
);
}
Run Code Online (Sandbox Code Playgroud)