VichUploaderBundle- 给定 "AppBundle\Entity\File"、"Symfony\Component\HttpFoundation\File\UploadedFile" 类型的预期参数

VichUploaderBundle- expected argument of type "AppBundle\Entity\File", "Symfony\Component\HttpFoundation\File\UploadedFile" given

我按照说明操作: https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/usage.md 确实如此,但我在保存用户实体时遇到以下错误:

Expected argument of type "AppBundle\Entity\File", "Symfony\Component\HttpFoundation\File\UploadedFile" given

代码如下:

/**
 * @ORM\Entity
 * @ORM\Table(name="symfony_demo_user")
 * @Vich\Uploadable
 */
class User extends BaseUser implements UserInterface 
{
    /**
     * @Vich\UploadableField(mapping="avatar_image", fileNameProperty="avatarName")
     * 
     * @var File
     */
    private $avatarFile;

    /**
     * @ORM\Column(type="string", length=255, nullable=true, options={"default": 0})
     *
     * @var string
     */
    private $avatarName;    

    /**
     * @ORM\Column(type="datetime")
     *
     * @var \DateTime
     */
    private $updatedAt;
/**
 * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
 *
 * @return User
 */
public function setAvatarFile(File $image = null)
{
    $this->avatarFile = $image;

    if ($image) {
        // It is required that at least one field changes if you are using doctrine
        // otherwise the event listeners won't be called and the file is lost
        $this->updatedAt = new \DateTime('now');
    }

    return $this;
}

/**
 * @return File
 */
public function getAvatarFile()
{
    return $this->avatarFile;
}   

我的表格:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Vich\UploaderBundle\Form\Type\VichImageType;

class ProfileFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        # no translation_domain means - app translations from ~/app/translations/
        $builder
            ->add('avatarFile', 'vich_image');
    }

你知道问题出在哪里吗?

您在方法 setAvatarFile 中说您正在等待 class File 的项目。您还没有设置任何使用命名空间这个 class 所以它寻找 class AppBundle\Entity\File

在文件顶部添加 use Symfony\Component\HttpFoundation\File\File