- 1
[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
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()
.
- 1