acceder a doctrine depuis un eventlistener

Par sf_padawan, il y a 3 ans


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

SiProdZz, il y a 3 ans

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

sf_padawan, il y a 3 ans

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é !

SiProdZz, il y a 3 ans

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.