Problème upload avec VichBundle

Ce sujet est résolu
135670
,

Bonjour,

Je suis en train de mettre en place un système de upload en suivant la doc de vichBundle sur Symfony 4.
J'ai su installer le bundle et configurer mes divers fichiers pour qu'il soit bien installé.

Cependant impossible d'upload une image et je me retrouve avec un erreur.

Ce que je fais

Voici mes différents fichiers.

vich_uploader.yaml
(Je précise que le dossier img/categories existe déjà dans la partie public du framework).

vich_uploader:
    db_driver: orm

    mappings:
      category_image:
        uri_prefix: /img/categories
        upload_destination: '%kernel.project_dir%/public/img/categories'

Mon entité Category

/**
     * @var File|null
     * @Vich\UploadableField(mapping="category_image", fileNameProperty="image")
     */
    private $imageFile;

    /**
     * @var string|null
     * @ORM\Column(type="string", length=255)
     */
    private $image;

    /**
     * @ORM\Column(type="datetime")
     */
    private $updated_at;

    /*------------------------------*/

    public function getImage(): ?string {
        return $this->image;
    }

    public function setImage( string $image ): self {
        $this->image = $image;

        return $this;
    }

    /**
     * @return null|File
     */
    public function getImageFile(): ?File {
        return $this->imageFile;
    }

    /**
     * @param null|File $imageFile
     *
     * @return Category
     */
    public function setImageFile( ?File $imageFile ): self {
        $this->imageFile = $imageFile;
        if ( $this->imageFile instanceof UploadedFile ) {
            $this->updated_at = new \DateTime( 'now' );
        }

        return $this;
    }

    public function getUpdatedAt(): ?\DateTimeInterface {
        return $this->updated_at;
    }

    public function setUpdatedAt( \DateTimeInterface $updated_at ): self {
        $this->updated_at = $updated_at;

        return $this;
    }

Mon controller category

/**
     * @Route("/administration/categories/{slug}-{id}", name="admin.category.edit", requirements={"slug": "[a-z0-9\-]*"})
     * @param CategoryRepository $category_repository
     * @param Category $category
     *
     * @param Request $request
     *
     * @param string $slug
     * @param int $id
     *
     * @param ObjectManager $em
     *
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
     */
    public function edit( CategoryRepository $category_repository, Category $category, Request $request, string $slug, int $id, ObjectManager $em ) {
        $category_repository = $category_repository->find( $id );

        if ( $category_repository->getSlug() !== $slug || $category_repository->getId() !== $id ) :
            return $this->redirectToRoute( 'admin.category.edit', [
                'id'   => $category_repository->getId(),
                'slug' => $category_repository->getSlug()
            ], 301 );
        endif;

        $form = $this->createForm( CategoryType::class, $category );
        $form->handleRequest( $request );

        if ( $form->isSubmitted() && $form->isValid() ) :
            $em->flush();

            return $this->redirectToRoute( 'admin.category.index' );
        endif;

        return $this->render( 'admin/category/edit.html.twig', [
            'category' => $category_repository,
            'form'     => $form->createView()
        ] );
    }

Ce que j'obtiens

Lors d'un test d'upload, je me retrouve avec l'erreur "Expected argument of type "string", "NULL" given."
J'ai essayé de voir d'où venait ce null mais je ne vois pas. Aucun upload se fait.
Je précise que si je viens à submit le formulaire sans toucher au champ upload, le reste fonctionne parfaitement.
Je pense que le soucis vient du updated_at mais c'est une piste assez floue.

Si quelqu'un a une idée, je suis preneur. Merci. :)

5 Réponse

Default
,

J'avais le même problème,

Essaye de retirer le typage de la variable dans le setter :

public function setImage( ?string $image ): self {
        $this->image = $image;

        return $this;
    }

Chez moi sa sa marche, l'upload fonctionne après.

135670
,

Salut,

Désolé de n'avoir pas répondu plus tôt.
En effet, c'était un soucis de typage.

Merci pour l'aide ! :)

176634
,

In case there are any errors with the regular upload, be sure you update your Flash Player. That button uses Flash. Also, as a secondary upload system, you can use Envato’s FTP Service 82 and also, if that doesn’t work, be sure Help With Dissertation to report it to Envato Help & Support Center 21 because this may be an error with your account or a general issue and reporting it is always a great idea

178230
,

Education is an essential part of our life. And it's so cool that you write about spending on education. I also want to be useful and recommend education service which provides academic essay help. If you have difficulties writing your essay or dissertation, you will certainly find dozens or even hundreds of writing services in USA.

Default
,

Hi! Are you tired of writing essay papers? I know the website where you can have a look on free essays. Maybe it will help you.