Php Symfony 4-VichUploaderBundle-未呈现文件输入
我有一个实体“FicheProduit”,与我的实体“Photo”有关,因为一个产品表可以有多张照片。在我的表单中,我希望通过VichUploaderBundle创建多个上载,但我遇到以下错误: 函数Vich\UploaderBundle\Form\Type\VichImageType::\uuu construct(),0在第92行的C:\wamp64\www\blh\u wines\vendor\symfony\Form\FormRegistry.php中传递,至少需要3个参数 FicheProduit.php:Php Symfony 4-VichUploaderBundle-未呈现文件输入,php,symfony,Php,Symfony,我有一个实体“FicheProduit”,与我的实体“Photo”有关,因为一个产品表可以有多张照片。在我的表单中,我希望通过VichUploaderBundle创建多个上载,但我遇到以下错误: 函数Vich\UploaderBundle\Form\Type\VichImageType::\uuu construct(),0在第92行的C:\wamp64\www\blh\u wines\vendor\symfony\Form\FormRegistry.php中传递,至少需要3个参数 FicheP
<?php
declare(strict_types = 1);
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Class FicheProduit
*
* @package App\Entity
*
* @ORM\Entity
*/
class FicheProduit
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer", options={"unsigned":true}, nullable=false)
*
* @var int
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Photo", mappedBy="ficheProduit", cascade={"persist"})
*
* @Assert\Valid()
*
* @var Photo[]|ArrayCollection
*/
protected $photos;
/**
* FicheProduit constructor.
*/
public function __construct()
{
$this->photos = new ArrayCollection();
}
/**
* @return int
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @param int $id
*/
public function setId(int $id): void
{
$this->id = $id;
}
/**
* @return Photo[]|ArrayCollection
*/
public function getPhotos()
{
return $this->photos;
}
/**
* @param Photo[]|ArrayCollection $photos
*/
public function setPhotos($photos): void
{
$this->photos = $photos;
}
/**
* Add photo
*
* @param Photo $photo
*
* @return FicheProduit
*/
public function addPhoto(Photo $photo)
{
$photo->setProduct($this);
$this->photos[] = $photo;
return $this;
}
/**
* Remove photo
*
* @param Photo $photo
*/
public function removePhoto(Photo $photo)
{
$this->photos->removeElement($photo);
}
}
easy_admin.yaml:
easy_admin:
entities:
FicheProduit:
class: App\Entity\FicheProduit
list:
title: 'Fiche produit'
form:
title: 'Ajouter une fiche produit'
fields:
- { property: 'photos', type: 'collection', type_options: { entry_type: 'App\Form\PhotoType', by_reference: false }}
PhotoType.php:
<?php
declare(strict_types = 1);
namespace App\Form;
use App\Entity\Photo;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Vich\UploaderBundle\Form\Type\VichImageType;
/**
* Class PhotoType
*
* @package App\Form
*/
class PhotoType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('imageName')
->add('imageFile', VichImageType::class, [
'required' => false,
'allow_delete' => true,
'download_label' => '...',
'download_uri' => true,
'image_uri' => true,
'imagine_pattern' => '...',
])
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Photo::class,
]);
}
}
据此:
->add('imageFile', CollectionType::class, ['entry_type' => VichImageType::class])
我没有更多的错误,但是我的文件输入没有显示,并且旁边有一个“0”
我遵循了此文档,但对我帮助不大:
我本人从未使用过EasyAdmin,但我认为您需要为照片实体定义一个管理员:
easy_admin:
entities:
Photo:
# ...
form:
fields:
- { property: 'imageFile', type: 'vich_image' }
我认为EasyAdmin界面不需要PhotoType formType
如果您按照本教程进行操作:
您将看到示例中没有FormType 您是否查阅了有关easy admin+VichUploader的文档?是的,但是没有解决办法。。明白了吗?
->add('imageFile', VichImageType::class, [
'required' => false,
'allow_delete' => true,
'download_label' => '...',
'download_uri' => true,
'image_uri' => true,
'imagine_pattern' => '...',
])
->add('imageFile', CollectionType::class, ['entry_type' => VichImageType::class])
easy_admin:
entities:
Photo:
# ...
form:
fields:
- { property: 'imageFile', type: 'vich_image' }