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

  [Opened] Champ upload dans un CRUD

Posted by Nesswaw on 10/05/2018 21:44

Bonjour,

J'ai un champ upload d'un fichier dans un jControllerDaoCrud

J'ai vu que l'on pouvait configurer la variable "protected $uploadsDirectory" pour modifier le chemin de stockage des fichiers, mais existe-il une variable ou fonction pour modifier le nom du fichier envoyer? Pour la création et la modification.

Par exemple j'aimerais "nettoyer" le nom du fichier, enlever les espaces, accent, etc.

Merci d'avance

  [Opened] Champ upload dans un CRUD

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

Bonjour,

$uploadsDirectory est utilisé avec la méthode jFormsBase::saveAllFiles() pour sauver les fichier. Cette méthode ne permet pas effectivement de modifier les noms des fichiers enregistrés.

Il faut plutôt utiliser jFormsBase::saveFile(), qui permet d'enregistrer un seul champs upload à la fois, mais à laquelle on peut indiquer un nom alternatif.

Dans ton crud, ce qu'il faudrait donc faire, c'est de laisser $uploadsDirectory à false pour désactiver l'usage de jFormsBase::saveAllFiles(). Tu redéfinis ensuite _afterCreate() et/ou _afterUpdate(), dans ton crud. Dans ces méthodes, tu vas toi même sauvegarder tes fichiers en appellant $form->saveFile() en indiquant le nom de fichier que tu veux.

Un truc du genre

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

    $filename = $form->getData('ref_du_upload');
    $filename = nettoyageNomFichier($filename);
    $form->saveFile('ref_du_upload', '/upload/directory/', $filename);

}

Voir https://docs.jelix.org/fr/manuel-1.6/jforms/apres-submit#stockage-des-fichiers

Si tu stocke le nom du fichier avec le dao, il faut peutêtre plutot faire ça :

protected function _beforeSaveUpdate($form, $form_daorec, $id) {
    $filename = $form->getData('ref_du_upload');
    $filename = nettoyageNomFichier($filename);
    $form->setData('ref_du_upload', $filename);
    $form_daorec->ref_du_upload = $filename;
}

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

    $filename = $form->getData('ref_du_upload');
    $form->saveFile('ref_du_upload', '/upload/directory/', $filename);
}

Idem avec _beforeSaveCreate() et _afterCreate().

 
Page
  1. Champ upload dans un CRUD