Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Champ upload editer un formulaire

Posted by Nesswaw on 10/05/2018 22:32

Bonjour,

J'ai un champ upload dans un jControllerDaoCrud

Lors de la création d'un enregistrement il me stocke bien le nom du fichier dans le champ de ma base.

Par contre, si je dois modifier ce même enregistrement, si je renvoie pas le fichier, il me vide le champ de la base...

Comment éviter ce soucis?

Merci d'avance

  [Opened] Champ upload editer un formulaire

Reply #1 Posted by laurentj on 10/07/2018 10:01

Bonjour,

Une technique consiste à ce que le champs de saisie dans le formulaire, correspondant au nom du fichier dans le dao, ne soit pas un champs de type upload, mais hidden. Ainsi dans ce champ hidden, tu as toujours la vraie valeur qui correspond à ce qu'il y a dans la base. Et dans le formulaire, tu ajoute ton champ upload, avec un ref qui ne correspond pas à une propriété de ton dao. Ainsi le champs upload, si il est vide, ne va jamais effacer le champs dans la base.

Et dans ton crud, à toi d'écraser toi-même la valeur de la propriété dao. Pour cela, dans _beforeSaveUpdate(), tu vas vérifier ce que tu reçois de ton champs upload, et si c'est non vide, tu modifie le champs hidden.

<form xmlns="http://jelix.org/ns/forms/1.1">
    <hidden ref="champs_nom_fichier" />
    <upload ref="nouveau_fichier">
        <label>Nouveau fichier</label>
    </upload>
</form>
protected function _beforeSaveUpdate($form, $form_daorec, $id) {
    $filename = $form->getData('nouveau_fichier');
    if ($filename) {
        $filename = nettoyageNomFichier($filename);
        $form->setData('nouveau_fichier',   $filename);
        $form_daorec->champs_nom_fichier = $filename;
    }
}

protected function _afterUpdate($form, $id, $resp) {

    $filename = $form->getData('nouveau_fichier');
    if ($filename) {
        $form->saveFile('nouveau_fichier', '/upload/directory/', $filename);
    }
}
 
Page
  1. Champ upload editer un formulaire