Symfony 5 : Uploader une image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Symfony 5 : Uploader une image

Re: Symfony 5 : Uploader une image

par GuillaumeLM » 29 mars 2022, 15:32

Bonjour,
regarde ce lien => lien

Re: Symfony 5 : Uploader une image

par hikaru-59 » 20 mars 2022, 16:19

J'ai oublié cette ligne :

Code : Tout sélectionner

$file = $form->get('cover')->getData();
J'ai maintenant un autre message d'erreur :

[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\Image" in property App\Entity\Movie::$cover was never imported. Did you maybe forget to add a "use" statement for this annotation?

Voici mon fichier Entity\Movie :

Code : Tout sélectionner

namespace App\Entity; use App\Repository\MovieRepository; use Symfony\Component\Validator\Constraints as Assert; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass=MovieRepository::class) */ class Movie { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $title; /** * @ORM\Column(type="string", length=255) */ private $slug; /** * @ORM\Column(type="text") */ private $description; /** * @ORM\Column(type="string", length=255) */ private $videoLink; /** * @Assert\Image(maxSize = "4096k") */ private $cover; /** * @ORM\Column(type="date") */ private $releasedAt; /** * @ORM\Column(type="integer") */ private $categoryId;
C'est la ligne

Code : Tout sélectionner

use Symfony\Component\Validator\Constraints as Assert;
qui n'est pas bonne ?

Symfony 5 : Uploader une image

par hikaru-59 » 15 mars 2022, 22:31

Bonjour,

J'ai un message d'erreur sur la page create_movie :

Cannot autowire argument $file of "App\Controller\MovieController::create()": it references class "Symfony\Component\HttpFoundation\File\UploadedFile" but no such service exists.

Le Controller :

Code : Tout sélectionner

use App\Entity\Movie; use App\Repository\MovieRepository; use App\Form\MovieType; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\String\Slugger\SluggerInterface; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class MovieController extends AbstractController { private $repo; private $em; private $slugger; public function __construct(MovieRepository $repo, EntityManagerInterface $em, SluggerInterface $slugger) { $this->repo = $repo; $this->em = $em; $this->slugger = $slugger; } /** * @Route("/movie/new", name="movie_create") */ public function create(Movie $movie = null, Request $request, UploadedFile $file) { $movie = new Movie(); $form = $this->createForm(MovieType::class, $movie); $form->handleRequest($request); if ($form->isSubmitted() and $form->isValid()) { // ----- Upload Image ----- $originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME); $safeFilename = $this->slugger->slug($originalFilename); $filename = $safeFilename.'-'.uniqid().'.'.$file->guessExtension(); $file->move( './assets/img/', $filename ); $movie->setCover( $filename ); // ----- ----- $this->em->persist($movie); $this->em->flush(); return $this->redirectToRoute('movie_show', ['id' => $movie->getId()]); } return $this->render('movie/create.html.twig', [ 'formMovie' => $form->createView() ]); } }
Le fichier Form MovieType :

Code : Tout sélectionner

namespace App\Form; use App\Entity\Movie; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\FileType; class MovieType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('title') ->add('slug') ->add('description') ->add('videoLink') ->add('cover', FileType::class) ->add('releasedAt') ->add('categoryId') ; } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => Movie::class, ]); } }