IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

comment utiliser sfWidgetFormInputFile pour enregistrer un nom de fichier en bdd ?


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut comment utiliser sfWidgetFormInputFile pour enregistrer un nom de fichier en bdd ?
    Bonjour, je souhaite utilisé le sfWidgetFormInputFile pour qu'un utilisateur navigue dans ces dossier et enregistre un fichier sans l'uploader mais juste enregistrer son nom en base de donnée.

    j'ai essayé juste un new sfWidgetFormInputFile() avec un validatorString() mais ça doit m'enregistrer le fichier et non le nom du fichier en base car ça m'affiche array en bdd

    merci pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    Personne pour m'aider?
    j'ai vu qu'il y avait une méthode getOriginalName() dans la classe sfValidatedFile
    mais je ne voit pas ou l'on peut utiliser cette methode ni quand?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    je remonte le post car je n'ai toujours pas trouvé de solution a mon problème

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je n'ai jamais eu le cas, mais j'ai jeté un œil rapide, pas de test.

    Le système de récupération des fichiers ne fonctionne pas exactement comme celui des autres champs de données qui utilisent un sfWidgetSchema pour gérer et récupérer les données.

    En fait, pour les fichiers, le widget ne fait qu'afficher la demande et c'est le validateur sfValidatorFile qui fait la partie récupération (et par là j'entends récupérer sur le serveur le fichier) du fichier. De ce sfValidatorFile on peut récupérer une instance sur un objet de la classe sfValidatedFile qui est l'objet qui "contiens" le fichier récupéré (après importation sur le serveur) et toutes ces propriété. Miracle, nous avons enfin une méthode getOriginalName() qui nous tends les bras.

    Ceci signifie que si on veut utiliser ce système pour récupérer un nom de fichier (et juste le nom) on va importer le fichier sur le serveur a chaque fois et pour rien, ce qui va impliquer de la bande passante et du temps utilisé pour rien.

    Il n'y a pas d'autre widget qui a ma connaissance permettraient de ne récupérer que le nom.

    Je pense que la meilleur solution serait de partir d'un sfWidgetInput et de créer une nouvelle classe genre sfWidgetInputFileName en étendant la classe de base. Et éventuellement de créer un validateur basé sur sfValidatorRegex qui permettrait de valider le nom du fichier récupéré.

    Bonne chance.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    merci pour toutes tes infos,

    je vais me documenter pour savoir quelles sont les étapes à suivre car je n'ai jamais créé de widget personnalisé étendu d'un widget

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    Bonjour, j'avais un peu laissé tomber ce problème
    je n'ai pas trouvé d'exemple dans la documentation de symfony

    Il faut que je créer un validator spécifique a mon problème, c'est à dire récupérer le Filename seulement et le mettre en base plutôt que tout le fichier, c'est bien ça?

    Faut'il que je récupère le validatorFile dans l'install de symfony et que je le bidouille ensuite je le colle dans le lib/validator de mon application?

    merci

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    J'ai regardé de plus près (je fais souvent une réponse rapide, puis, plus tard, quant j'ai un peu de temps, une exploration plus approfondie).

    Mon idée était d'utiliser un <input type="file" ...> pour récupérer le nom du fichier à télécharger, mais c'est une mauvaise idée, vu que dans ce cas, le html retransmet tous le fichier et pas juste le nom.

    Donc mauvaise solution.

    Et on reviens au début. Pas de solution pour ne récupérer que le nom du fichier sans remonter le fichier lui même.

    On peut d'ailleurs ce demander l'intérêt d'avoir juste un nom de fichier en local stocké dans une base, mais c'est une autre histroire.

    Là, mais sans avoir cherché plus loin, je ne vois pas de solution simple.

    Une trop simple consisterait à utiliser directement un sfWidgetFormInput et a demander à l'utilisateur de taper le chemin, mais ceci ne me semble pas optimal.

    La plus compliquer consisterait à utiliser la trop simple, mais à l'étendre avec du javascript. Et là, je te souhaite bonne chance ! Il faudrait voir dans jscript s'il y a des bibliothèques qui permettent de gérer ce type de cas, aucune idée.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    merci pour ta réponse rapide,

    bon finalement je vais uploader le fichier et je verai si je l'utilise ou pas,
    donc maintenant j'utilise un sfWidgetFormInputFile() avec un sfValidatorFile(),
    avec required a false pour que l'utilisateur ne soit pas obligé de rajouter un fichier par contre je n'ai plus le flashes required qui s'affiche mais l'application require vraiment une valeur dans le champ car il me met cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'link_billofmaterials' cannot be null
    comment puis je faire pour laisser ce champ vide ?

    avant avec un inputText simple je faisait un trim dans la methode dobind, la comment je peut faire?

  9. #9
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Tu sais que quant tu utilises l'upload de fichier, tu dois fournir deux paramètres à la méthode bind de l'objet form ?
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    eeeuu non quels paramètres?

    ceux la?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->form->bind($request->getParameter('contact'), $request->getFiles('contact'));
    le probléme est que mon formulaire est dans un edit d'un module et que tous est gérer par le generator admin

  11. #11
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Oui, ces deux là.

    Bon, si tu est dans un module admin, on peut plus que supposer qu'ils sont pris en compte.

    Donc, le problème est ailleurs.

    Tu n'aurais pas un paramètre qui traine dans le générateur qui rend la saisie obligatoire ? Ou un dans le form qui viendrait modifier le form d'origine ?
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    non j'ai juste mis les validatorFile avec required =>false,

    avant avec mon inputText je faisait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      protected function doBind(array $values)
      {
        if ('' === trim($values['new']['nomenclature']))
        {
          unset($values['newNomenclature'], $this['newNomenclature']);
        }
        parent::doBind($values);
      }
    J'ai aussi testé le validateur personnalisé mais ça ne marche pas plus
    http://www.symfony-project.org/more-...r_personnalise

  13. #13
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Après réflexions, une de plus, je me rend compte que je n'ai jamais utilisé de récupération de fichiers avec le module administration, ni entendu parlé d'un tel exercice.

    Je te propose l'essai suivant, génère un module de test avec le CRUD et teste juste la récupération du nom de fichier, hors tous les problèmes de generator ou d'autre champ.

    En fonction, il sera toujours temps de décider comment utiliser le résultat.

    Commence par t'inspirer du tuto Jobeet pour récupérer le fichier puis juste le nom.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    j'ai suivi le tuto jobeet et d'autres trouvé sur le net,
    finalement je suis arrivé a enregistré le nom du fichier téléchargé mais effectivement j'effectue le téléchargement du fichier.
    Mais maintenant mon soucis c'est que je n'arrive pas a ignoré les champ d'ajout de fichier si l'utilisateur les laisses vides, pourtant j'ai essayé d'ajouter les postvalidator comme dans le tuto
    http://www.symfony-project.org/more-...r_personnalise

  15. #15
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Là, il faut que tu cherche seul, je n'ai jamais utilisé.

    Où que tu me contact par MP pour m'envoyer un zip de ton application et de ton fixature ou un extrait significatif des données pour faire des tests.

    Si je trouve un peu de temps demains, je test.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    merci pour ton aide je vais encore essayé de cherché demain,
    je te recontacte si je n'avance pas
    merci encore

Discussions similaires

  1. VBA - Récupération d'une cellule pour enregistrer un nom de fichier
    Par Jane92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2015, 09h45
  2. Macro pour enregistrer sous / nom du fichier
    Par vinzu dans le forum VBA Word
    Réponses: 12
    Dernier message: 05/11/2014, 18h19
  3. Réponses: 14
    Dernier message: 22/04/2006, 21h59
  4. Comment utiliser un composant sans son nom ?
    Par aliwassem dans le forum Langage
    Réponses: 4
    Dernier message: 03/10/2005, 20h47
  5. [Struts]comment faites-vous pour enregistrer..
    Par pouss dans le forum Struts 1
    Réponses: 7
    Dernier message: 30/09/2005, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo