我想在Symfony 3中创建一个包含多个文件上传的表单,但它无法正常工作,我的控制器出错:
类型" Doctrine \ Common \ Collections \ Collection | array"的预期值对于关联字段" SGBundle \ Entity \ Album#$ images",得到" Symfony \ Component \ HttpFoundation \ File \ UploadedFile"代替。
我有2个实体:Album.php和带有OneToMany关系的Image.php(一张专辑有几张图片)。
我的图片已成功上传到我的文件夹,但我无法将其插入我的数据库。
以下是我的控制器中代码中最重要的部分:
$images = $album->getImages();
foreach ($images as $image) {
$fileName = md5(uniqid('img_album_', true));
$fileExtension = $image->guessExtension();
$nomImageComplet = $fileName . '.' . $fileExtension;
$image->move(
$this->getParameter('albums_images_directory'),
$nomImageComplet
);
$tinified = fromFile($this->getParameter('albums_images_directory') . '/' . $nomImageComplet);
$tinified->toFile($this->getParameter('albums_images_directory') . '/' . $nomImageComplet);
$img = new Image();
$img->setExtension($fileExtension);
$img->setFile($fileName);
$em->persist($img);
$em->flush();
}
我的FormType:
/**
* Class AlbumType
*
* @package SGBundle\Form
*/
class AlbumType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->
add('titre', TextType::class, [
'attr' => [
'placeholder' => 'Titre de l\'album (140 caractères max) *',
],
])
->add('miniature', FileType::class, [
'attr' => [
'placeholder' => 'Miniature de l\'album *',
], 'required' => false, 'data_class' => null,
])
->add('images', FileType::class, [
'attr' => [
'placeholder' => 'Images de l\'album *',
'accept' => 'image/*',
'multiple' => 'multiple'
], 'required' => false, 'data_class' => null, 'multiple' => true,
])
->add('envoyer', SubmitType::class)
->add('annuler', ResetType::class);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Album::class,
]
);
}
提前感谢您的帮助
答案 0 :(得分:1)
您的images
属性应该是这样的
->add('images', CollecionType::class, [
'entry_type' => ImageType::class,
'allow_add' => true,
'allow_delete' => true
])
然后你的ImageType :: class应该是这样的
->add('image', FileType::class, [
'attr' => [
'placeholder' => 'Images de l\'album *',
'accept' => 'image/*',
'multiple' => 'multiple
], 'required' => false, 'data_class' => null, 'multiple' => true,])