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


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();
    }
Entity
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;
 
    }
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
 
		$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( ... );
Comment faire pour que l'attribut file1 ne soit pas vide lors de la seconde soumission.

Merci pour votre aide,
Gillou.