Editer un formulaire avec un champ file
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:
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:
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:
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.