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. :)

3 réponses


Vylinas
Réponse acceptée

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.

Salut,

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

Merci pour l'aide ! :)

bonsoir Les Chefs jai un problème pour uploder les images dans mon projet de symfony 4