Bonjour à tous,
J'ai fait un formulaire afin d'uploader une photo mais il me met que le champ est vide malgré le fait que j'ai regardé la doc et fait quelques recherches afin de pouvoir se faire.
J'aimerais savoir ce qui pèche dans mon code afin de ne pas devoir mettre la valeur à null dans mon code, donc dans ma base de données.
voici le code concerné pour mon entitée :
Le formulaire que j'utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 class OuvragesEchanges { /** * @var string * * @ORM\Column(name="photos_ouvrage_path", type="string", length=255) */ private $photosOuvragePath; /** * @Assert\File( * maxSize = "1024k", * maxSizeMessage = "Votre fichier est trop volumineux, max 1 MO !", * mimeTypes ={"image/jpeg","image/png","image/gif"}, * mimeTypesMessage = "Merci d'uploader un fichier de type image !" * ) */ private $photosOuvrageFile; /** * Set photosOuvragePath * * @param string $photosOuvragePath * @return OuvragesEchanges */ public function setPhotosOuvragePath($photosOuvragePath) { $this->photosOuvragePath = $photosOuvragePath; return $this; } /** * Get photosOuvragePath * * @return string */ public function getPhotosOuvragePath() { return $this->photosOuvragePath; } /** * @return mixed */ public function getPhotosOuvrageFile(){ return $this->photosOuvrageFile; } /** * @param mixed $photosOuvrageFile */ public function setPhotosOuvrageFile(UploadedFile $photosOuvrageFile) { //$photosOuvrageFile devient du type UploadedFile $this->photosOuvrageFile = $photosOuvrageFile; } //retourner le chemin absolu d'un fichier public function getAbsolutePath(){ return null === $this->photosOuvragePath ? null : $this->getUploadRootDir().'/'.$this->photosOuvragePath; } //retourner le chemain relatif d'un fichier (methode utilisee dans les templates Twig) public function getWebPath(){ return null === $this->photosOuvragePath ? null : $this->getUploadDir().'/'.$this->photosOuvragePath; } protected function getUploadRootDir(){ return __DIR__.'/../../../../web/'.$this->getUploadDir(); } protected function getUploadDir(){ return "uploads/images"; } /** * @ORM\PrePersist() * @ORM\PreUpdate() */ public function preUpload(){ if (null !== $this->photosOuvrageFile){ //Avant l'uploads on change le nom du fichier téléchargé via des méthodes CRYPT $this->photosOuvragePath = sha1(uniqid(mt_rand(),true)).'.'.$this->photosOuvrageFile->guessExtension(); // donne par exemple = "55112sdfs2111qdrgthhztq412.jpg" } } /** * @ORM\PrePersist() * @ORM\PreUpdate() */ public function upload(){ //si pas d'image on stoppe la fonction if (null === $this->photosOuvrageFile){ return; } //si fichier déplacement vers le répertoire uploads $this->photosOuvrageFile->move($this->getUploadRootDir(),$this->photosOuvragePath); //puis on vide l'attribut $this->photosOuvrageFile = null; } /** * @ORM\PostRemove() */ public function removeUpload(){ if ($file = $this->getAbsolutePath()){ unlink($file); } }
et le code de mon contrôleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('titreOuvrage',TextType::class,array('label'=>'Nom de l\'ouvrage','attr'=>array('class'=>'form-control'))) ->add('resumeOuvrage',TextareaType::class,array('label'=>'Résumé de l\'ouvrage','attr'=>array('class'=>'form-control'))) ->add('auteur',CollectionType::class,array('entry_type'=>AuteursType::class,'allow_add'=>true,'allow_delete'=>true,'prototype'=>true)) ->add('editeur',EntityType::class,array('label'=>'Sélectionnez l\'éditeur','attr'=>array('class'=>'form-control'),'class'=>'SB\MainBundle\Entity\Editeurs','choice_label'=>'libelle_editeur')) ->add('etat',EntityType::class,array('label'=>'Cochez l\'état dans lequel se trouve votre ouvrage','class'=>'SB\MainBundle\Entity\EtatsOuvrages','choice_label'=>'libelle_etat','expanded'=>true)) ->add('categorie',EntityType::class,array('label'=>'Selectionnez une catégorie','attr'=>array('class'=>'form-control'),'class'=>'SB\MainBundle\Entity\Categories','choice_label'=>'libelle_categorie')) ->add('genre',EntityType::class,array('label'=>'Cochez un ou plusieurs genre','class'=>'SB\MainBundle\Entity\Genres','choice_label'=>'libelle_genre','multiple'=>true,'expanded'=>true)); //->add('photosOuvragePath',TextType::class,array('label'=>'Chemin de votre photo','attr'=>array('class'=>'form-control'))) if ($builder->getData()->getId() == false){ $builder->add('photosOuvrageFile',FileType::class,array('label'=>'Ajouter une photo')); } ; }
Et voici l'erreur q'il m'affiche : SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'photos_ouvrage_path' ne peut être vide (null). J'ai déjà regardé une autre sujet qui a déjà été ouvert mais cela ne m'a pas aidé :'(.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public function createNewOuvrageEchangeAction(Request $request){ $user = $this->get('security.token_storage')->getToken()->getUser(); $ouvrage = new OuvragesEchanges($user); $em = $this->getDoctrine()->getManager(); $form = $this->createForm(OuvragesEchangesType::class,$ouvrage); $formHandler = new FormHandler($request,$em,$form); //si validation du formulaire et données >> ok ! if ($formHandler->process()){ return $this->redirect($this->generateUrl('sb_main_ouvrage_echange_show',['id'=>$ouvrage->getId()])); } $datas = array('form'=>$form->createView()); return $this->render('SBMainBundle:Main:createEchange.html.twig',$datas); }
Merci de votre aide !
Partager