1つのフォームタイプを取得して表示しようとしていますが、ユーザーがパッチアップロードを一度にアップロードする必要がある場合があります。つまり、アップロードするファイルが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,
));
}
写真タイプコードは次のとおりです。
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',
));
}
私のコントローラー機能は次のとおりです。
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()
);
}
どんな助けでも素晴らしいでしょう。