Bonjour
J'ai installé dropzone sur un formaulaire de mon projet symfony 6.1
Les images sont bien uploadées sur le serveur.
Comme indiqué dans la doc
https://github.com/1up-lab/OneupUploaderBundle/blob/master/doc/custom_logic.md
j'ai créé un listener qui se déclenche a l'upload d'image, visant a insérer les données correspondant en base de données.
voici mon listener :

<?php

namespace App\EventListener;

use Oneup\UploaderBundle\Event\PostPersistEvent;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

use Doctrine\Persistence\ManagerRegistry;
use App\Entity\ProductImage;
use App\Repository\ProductImageRepository;
use App\Repository\ProductRepository;

class UploadListener   extends AbstractController
{

    public function onUpload(PostPersistEvent $event, ManagerRegistry $doctrine, ProductRepository $productRepository )
    {

    $entityManager = $doctrine->getManager();

    $product = $productRepository ->findOneById(1);

    $productImage = new ProductImage();
    $productImage->setFilename('pwet');
    $productImage->setProduct($product);
    $productImage->setIsDefault(false);

    $entityManager->persist($productImage);
    $entityManager->flush();

        //if everything went fine
        $response = $event->getResponse();
        $response['success'] = true;
        return $response;
    }
}

ce qui me retourne l'erreur suivante :

App\EventListener\UploadListener::onUpload(): Argument #2 ($doctrine) must be of type Doctrine\Persistence\ManagerRegistry, string given, called in /var/www/tst_app/vendor/symfony/event-dispatcher/Debug/WrappedListener.php on line 115

J'ai testé ce code dans un controller "classique" (une page web) et ça fonctionne correctement, mais pas dans le listener.

Quelqu'un voit ce qui cloche ?

3 réponses


Bonjour,
Utilise plutôt EntityManagerInterface et déclare le dans le constructeur.
Puis renomme le "entitymanager" et non "doctrine" du coup

effectivement, ça marche mieux avec EntityManagerInterface !
par contre entre temps, j'ai fait differement, plutot que d'utiliser l'upload par defaut et un listener, j''utilise un formulaire personnalisé qui m'evite de devoir passer par ce listener :-)

En tout cas merci pour la rapidité et l'efficacité !

Aucun soucis. Oui je ne pense pas que le listener soit la meilleure solution pour ton cas. Après a voir avec plus de préçision. Bon courage.