Torpedr
Torpedr

Reputation: 157

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

I followed the instruction: https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/usage.md to the letter but I'm getting the following error while saving User entity:

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

Here's the code:

/**
 * @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;
}   

My Form:

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');
    }

Do you know there the problem is?

Upvotes: 9

Views: 6170

Answers (1)

jobou
jobou

Reputation: 1853

You say in the method setAvatarFile that you are waiting for an item of class File. You have not setted any use to namespace this class so it looks for the class AppBundle\Entity\File

Add a use Symfony\Component\HttpFoundation\File\File at the top of your file.

Upvotes: 16

Related Questions