Bonjour,
J'utilise un formulaire qui permet d'uploader un fichier. L'upload se passe bien. Mais si je retourne sur le formulaire, avec un identifiant existant (pour le modifier par exemple), tous les champs sont correctement pré-remplis, sauf le champ "file" qui est vide.
Le formulaire
- attachment1 est le nom de l'attribut persisté.
- file1 correspond au champs input file
Entity
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public function buildForm( FormBuilderInterface $builder, array $options ) { $builder ->add( 'observations', 'textarea', array( 'required'=>false ) ) ->add( 'attachment1', 'text', array( 'required'=>false ) ) ->add( 'file1', 'file', array( 'required' => false )) ->getForm(); }
Le 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 /** * @ORM\Column(name="tic_attachment1_s", type="string", length=255, nullable=true) */ protected $attachment1; protected $file1; /** * @ORM\PrePersist() * @ORM\PreUpdate() */ public function preUpload() { if (! is_null($this->file1)) { $this->attachment1 = 'uploads/tickets/'.$this->getId().'/'.$this->file1->getClientOriginalName(); } return; } public function upload() { if (! is_null($this->file1)) { // On garde le nom original du fichier de l'internaute $name = $this->file1->getClientOriginalName(); // On déplace le fichier envoyé dans le répertoire $upload = __DIR__.'/../../../../web/uploads/tickets'; $this->file1->move($upload . '/' . $this->getId(), $name); } return; }
Comment faire pour que l'attribut file1 ne soit pas vide lors de la seconde soumission.
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 $oTicket = $this->getDoctrine()->getRepository( 'AhsTicketBundle:Ticket' )->findOneById( $id ); if ( !$oTicket ) throw $this->createNotFoundException( "Le ticket ".$id." n'existe pas" ); //Formulaires $fTicket = $this->createForm( new TicketRendezVousType(), $oTicket ); $request = $this->getRequest(); if( $request->getMethod() == 'POST' ) { $fTicket->bind( $request ); if( $fTicket->isValid() ) { $oTicket->upload(); $em = $this->getDoctrine()->getManager(); $em->persist( $oTicket ); $em->flush(); return $this->redirect( $this->generateUrl( ...) ); } } return $this->render( ... );
Merci pour votre aide,
Gillou.
Partager