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 :

[Symfony2] Upload fichiers KO à l'ajout, OK à l'update [2.x]


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut [Symfony2] Upload fichiers KO à l'ajout, OK à l'update
    Bonjour,

    Avant tout, je sais, ce sujet existe déjà sur un autre site, mais je préfère ouvrir plusieurs discussions sur plusieurs forums pour avoir plusieurs sons de cloche...

    Ce sujet a peut-être déjà été traité, mais je préfère en créer un autre pour mon problème.

    J'ai mis en place un système d'échange de fichiers entre mon entreprise et nos clients.

    J'ai donc un formulaire d'ajout d'un document avec un champ file en relation OneToOne.

    Mon problème est le suivant, lorsque j'ajoute un nouveau document, le fichier n'est pas uploadé, et donc persisté en base, je suis obligé de le modifier et de rajouter le fichier à uploader pour qu'il soit persisté, ce qui, vous en conviendrez est assez fastidieux et peu intuitif pour nos clients...

    J'ai suivi à la lettre un tuto sur l'upload avec les événements Doctrine, et ça ne marche pas.

    Voici mon entité Document (représentant le fichier à uploader) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
     
    <?php
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    namespace Asmolding\Bundle\Entity;
     
    /**
     * Description of Image
     *
     * @author SGOURMELON
     */
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * @ORM\Entity
     * @ORM\HasLifecycleCallbacks
     */
    class Document
    {
      /**
       * @ORM\Column(name="id", type="integer")
       * @ORM\Id
       * @ORM\GeneratedValue(strategy="AUTO")
       */
      private $id;
     
      /**
       * @ORM\Column(name="extension", type="string", length=255)
       */
      private $extension;
     
      /**
       * @ORM\Column(name="alt", type="string", length=255)
       */
      private $alt;
     
     /**
      *
      * @var type 
      */
      private $file;
     
       // On ajoute cet attribut pour y stocker le nom du fichier temporairement
      private $tempFilename;
     
      // On modifie le setter de File, pour prendre en compte l'upload d'un fichier lorsqu'il en existe déjà un autre
      public function setFile(UploadedFile $file)
      {
        $this->file = $file;
     
        // On vérifie si on avait déjà un fichier pour cette entité
        if (null !== $this->extension) {
          // On sauvegarde l'extension du fichier pour le supprimer plus tard
          $this->tempFilename = $this->extension;
     
          // On réinitialise les valeurs des attributs url et alt
          $this->extension = null;
          $this->alt = null;
        }
      }
     
      /**
       * @ORM\PrePersist()
       * @ORM\PreUpdate()
       */
      public function preUpload()
      {
        // Si jamais il n'y a pas de fichier (champ facultatif)
        if (null === $this->file) {
          return;
        }
     
        // Le nom du fichier est son id, on doit juste stocker également son extension
        // Pour faire propre, on devrait renommer cet attribut en « extension », plutôt que « url »
        $this->extension = $this->getFile()->guessExtension();
     
        // Et on génère l'attribut alt de la balise <img>, à la valeur du nom du fichier sur le PC de l'internaute
        $this->alt = $this->getFile()->getClientOriginalName();
      }
     
      /**
       * @ORM\PostPersist()
       * @ORM\PostUpdate()
       */
      public function upload()
      {
        // Si jamais il n'y a pas de fichier (champ facultatif)
        if (null === $this->file) {
          return;
        }
     
        // Si on avait un ancien fichier, on le supprime
        if (null !== $this->tempFilename) {
          $oldFile = $this->getUploadRootDir().'/'.$this->id.'.'.$this->tempFilename;
          if (file_exists($oldFile)) {
            unlink($oldFile);
          }
        }
     
        // On déplace le fichier envoyé dans le répertoire de notre choix
        $this->file->move(
          $this->getUploadRootDir(), // Le répertoire de destination
          $this->alt   // Le nom du fichier à créer, ici « id.extension »
        );
      }
     
      /**
       * @ORM\PreRemove()
       */
      public function preRemoveUpload()
      {
        // On sauvegarde temporairement le nom du fichier, car il dépend de l'id
        $this->tempFilename = $this->getUploadRootDir().'/'.$this->id.'.'.$this->extension;
      }
     
      /**
       * @ORM\PostRemove()
       */
      public function removeUpload()
      {
        // En PostRemove, on n'a pas accès à l'id, on utilise notre nom sauvegardé
        if (file_exists($this->tempFilename)) {
          // On supprime le fichier
          unlink($this->tempFilename);
        }
      }
     
      public function getUploadDir()
      {
        // On retourne le chemin relatif vers l'image pour un navigateur
        return 'uploads/docs';
      }
     
      protected function getUploadRootDir()
      {
        // On retourne le chemin relatif vers l'image pour notre code PHP
        return __DIR__.'/../../../../web/'.$this->getUploadDir();
      }
     
      // On récupère le chemin pour afficher l'image
      public function getWebPath()
      {
        return $this->getUploadDir().'/'.$this->getAlt();
      }
     
      // Getters et setters
      function getId() {
          return $this->id;
      }
     
      function getExtension() {
          return $this->extension;
      }
     
      function getAlt() {
          return $this->alt;
      }
     
      public function getFile()
      {
        return $this->file;
      }
     
      function setId($id) {
          $this->id = $id;
      }
     
      function setExtension($extension) {
          $this->extension = $extension;
          return $this;
      }
     
      function setAlt($alt) {
          $this->alt = $alt;
      }
    }
    Mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?php
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    namespace Asmolding\Bundle\Form\Type;
     
    use Asmolding\Bundle\Entity\CompanyRepository;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    /**
     * Description of FormFtp
     *
     * @author SGOURMELON
     */
    class FormFtpType extends AbstractType {
     
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('fileType', 'choice', array('choices' => array(
                            'Commande' => 'COMMANDE',
                            'AR Commande' => 'AR COMMANDE', 
                            'Planning Général' => 'PLANNING GENERAL', 
                            'CAO' => 'CAO',
                            'Facture' => 'FACTURE', 
                            'Cahier des Charges' => 'CAHIER DES CHARGES',
                            'Photos' => 'PHOTOS',
                            'Vidéos' => 'VIDEOS',
                            'Autres' => 'AUTRES'
                        )))
                    ->add('comment', 'textarea')
                    ->add('document', new FormDocumentType(), array('required' => false));
        }
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
          $resolver->setDefaults(array(
            'data_class' => 'Asmolding\Bundle\Entity\TransferHistory',  
          ));
        }
     
        public function getName() {
           return 'form_ftp'; 
        }
     
     
     
    }
    Et mon controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    /*
    * Cette méthode est appelée par une autre méthode de gestion, peu importante ici.
    */
    public function addFTPAction($form){
     
            $em = $this->getDoctrine()->getManager();
     
            $from = $this->getUser();
            $companyFrom = $from->getCompany();
            $senderName = $from->getNameFirstname();
            $project = $form->get('project')->getData();
            $projectName = $project->getName();
            $mold = $form->get('mold')->getData();
            $moldName = $mold->getName();
     
            $ftp = new TransferHistory();
     
            $ftp->setCompanyFrom($companyFrom);
            $ftp->setFrom($from);
            $ftp->setSenderName($senderName);
            $ftp->setCompanyTo($form->get('companyTo')->getData());
            $ftp->setTo($form->get('to')->getData());
            $ftp->setProject($project);
            $ftp->setProjectName($projectName);
            $ftp->setMold($mold);
            $ftp->setMoldName($moldName);
            $ftp->setFileType($form->get('fileType')->getData());
            $ftp->setComment($form->get('comment')->getData());
            $ftp->setDate(new DateTime);
     
            $em->persist($ftp);
            $em->flush();
        }
    Si quelqu'un a une idée...

    Je précise également que je rencontre le même problème avec l'upload d'images pour mes projets, ce qui est normal puisque c'est le même tuto que j'ai suivi.

    Merci,

    SG

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Bonjour,
    si je me rappelle bien, ce tuto





    traite l'upload (ajout et update) .Pour le cas d'un upload (copie de fichier sous le serveur pas dans la bdd).

  3. #3
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut regarde coté doctrine
    j'ai déjà eu ce problême differement avec une autre lib.

    il se peut que le probleme est coté doctrine (les listeners).

    désolé je ne peux pas expliquer mieux.

    Bon chance
    Je suis Développeur Senior ouvert aux opportunités
    Mon blog

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci pour vos réponses,

    @mehrezlabidimehrez, je vais essayer de voir le tuto, mais je suis au boulot, je verrais ça ce midi.

    @phpiste, j'ai des événements Doctrine présents avec PrePersist, PreUpdate, PostPersist, PostUpdate, ... ce serait là dedans qu'il y aurait une erreur ? Mauvaise version de Doctrine ??

    J'ai doctrine/orm version 2.4.8, dbal version 2.5.2

    Php version 5.4.45 sur un OVH mutualisé perso.

    En fait, je ne vois pas pourquoi ça ne marche pas.

    Je n'ai pas d'attribut name dans mon entité document, le nom étant l'attribut alt (le nom original côté client).

    Merci,

    SG

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    la méthode upload n'est pas appelé, car Doctrine ne se base que sur les attributs mappés pour savoir s'il doit effectuer une mise à jour.

    Le plus simple: ajouter un champ "uploadedAt" (mappé par doctrine et correspondant donc à une colonne de la BDD), et mettre à jour ce champ dans la méthode setFile().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /**
    * @ORM\Column(type="datetime")
    **/
    private $uploadetAt;
     
    public function setFile($file)
    {
      $this->uploadedAt=new \DateTime();
      $this->file=$file;
    //...
    }
    C'est une question récurente sur ce forum: http://www.developpez.net/forums/d11.../#post_6547796

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci arnooo999, et désolé pour la redondance, mais sur les autres topics c'est à l'update qu'il y a un sousi, moi c'était à l'ajout, j'ai donc préféré en ouvrir un nouveau.

    J'ai ajouté un champ updatedAt, mis à jour ma table pour ajouter la colonne, et mis le setter de cet attribut dans le setFile(), mais rien n'y fait, le fichier n'est toujours pas persisté...

    Je remets le nouveau code, si j'ai oublié des choses, dis moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
     
    <?php
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    namespace Asmolding\Bundle\Entity;
     
    /**
     * Description of Image
     *
     * @author SGOURMELON
     */
     
    use DateTime;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * @ORM\Entity
     * @ORM\HasLifecycleCallbacks
     */
    class Document
    {
      /**
       * @ORM\Column(name="id", type="integer")
       * @ORM\Id
       * @ORM\GeneratedValue(strategy="AUTO")
       */
      private $id;
     
      /**
       * @ORM\Column(name="extension", type="string", length=255)
       */
      private $extension;
     
      /**
       * @ORM\Column(name="alt", type="string", length=255)
       */
      private $alt;
     
     /**
      *
      * @var type 
      * @Assert\File()
      */
      private $file;
     
      /**
       *
       * @var datetime
       * 
       * @ORM\Column(name="updated_at", type="datetime")
       */
      private $updatedAt;
     
       // On ajoute cet attribut pour y stocker le nom du fichier temporairement
      private $tempFilename;
     
      // On modifie le setter de File, pour prendre en compte l'upload d'un fichier lorsqu'il en existe déjà un autre
      public function setFile(UploadedFile $file)
      {
        $this->updatedAt = new DateTime();
        $this->file = $file;
     
        // On vérifie si on avait déjà un fichier pour cette entité
        if (null !== $this->extension) {
          // On sauvegarde l'extension du fichier pour le supprimer plus tard
          $this->tempFilename = $this->extension;
     
          // On réinitialise les valeurs des attributs url et alt
          $this->extension = null;
          $this->alt = null;
        }
      }
     
      /**
       * @ORM\PrePersist()
       * @ORM\PreUpdate()
       */
      public function preUpload()
      {
        // Si jamais il n'y a pas de fichier (champ facultatif)
        if (null === $this->file) {
          return;
        }
     
        // Le nom du fichier est son id, on doit juste stocker également son extension
        // Pour faire propre, on devrait renommer cet attribut en « extension », plutôt que « url »
        $this->extension = $this->getFile()->guessExtension();
     
        // Et on génère l'attribut alt de la balise <img>, à la valeur du nom du fichier sur le PC de l'internaute
        $this->alt = $this->getFile()->getClientOriginalName();
      }
     
      /**
       * @ORM\PostPersist()
       * @ORM\PostUpdate()
       */
      public function upload()
      {
        // Si jamais il n'y a pas de fichier (champ facultatif)
        if (null === $this->file) {
          return;
        }
     
        // Si on avait un ancien fichier, on le supprime
        if (null !== $this->tempFilename) {
          $oldFile = $this->getUploadRootDir().'/'.$this->id.'.'.$this->tempFilename;
          if (file_exists($oldFile)) {
            unlink($oldFile);
          }
        }
     
        // On déplace le fichier envoyé dans le répertoire de notre choix
        $this->file->move(
          $this->getUploadRootDir(), // Le répertoire de destination
          $this->alt   // Le nom du fichier à créer, ici « id.extension »
        );
      }
     
      /**
       * @ORM\PreRemove()
       */
      public function preRemoveUpload()
      {
        // On sauvegarde temporairement le nom du fichier, car il dépend de l'id
        $this->tempFilename = $this->getUploadRootDir().'/'.$this->id.'.'.$this->extension;
      }
     
      /**
       * @ORM\PostRemove()
       */
      public function removeUpload()
      {
        // En PostRemove, on n'a pas accès à l'id, on utilise notre nom sauvegardé
        if (file_exists($this->tempFilename)) {
          // On supprime le fichier
          unlink($this->tempFilename);
        }
      }
     
      public function getUploadDir()
      {
        // On retourne le chemin relatif vers l'image pour un navigateur
        return 'uploads/docs';
      }
     
      protected function getUploadRootDir()
      {
        // On retourne le chemin relatif vers l'image pour notre code PHP
        return __DIR__.'/../../../../web/'.$this->getUploadDir();
      }
     
      // On récupère le chemin pour afficher l'image
      public function getWebPath()
      {
        return $this->getUploadDir().'/'.$this->getAlt();
      }
     
      // Getters et setters
      function getId() {
          return $this->id;
      }
     
      function getExtension() {
          return $this->extension;
      }
     
      function getAlt() {
          return $this->alt;
      }
     
      public function getFile()
      {
        return $this->file;
      }
     
      function setId($id) {
          $this->id = $id;
      }
     
      function setExtension($extension) {
          $this->extension = $extension;
          return $this;
      }
     
      function setAlt($alt) {
          $this->alt = $alt;
      }
    }
    Merci,

    SG

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Effectivement le problème est différent.

    A moins que je n'ai encore mal lu dans ce code, je ne vois pas d'appel à la méthode setDocument de ton entité TransfertHistory.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public function addFTPAction($form){
     
            $em = $this->getDoctrine()->getManager();
     
            $from = $this->getUser();
            $companyFrom = $from->getCompany();
            $senderName = $from->getNameFirstname();
            $project = $form->get('project')->getData();
            $projectName = $project->getName();
            $mold = $form->get('mold')->getData();
            $moldName = $mold->getName();
     
            $ftp = new TransferHistory();
     
            $ftp->setCompanyFrom($companyFrom);
            $ftp->setFrom($from);
            $ftp->setSenderName($senderName);
            $ftp->setCompanyTo($form->get('companyTo')->getData());
            $ftp->setTo($form->get('to')->getData());
            $ftp->setProject($project);
            $ftp->setProjectName($projectName);
            $ftp->setMold($mold);
            $ftp->setMoldName($moldName);
            $ftp->setFileType($form->get('fileType')->getData());
            $ftp->setComment($form->get('comment')->getData());
            $ftp->setDate(new DateTime);
     
            $em->persist($ftp);
            $em->flush();
        }
    "$em->persist($ftp)" indique bien à Doctrine de persister l'entité TransfertHistory en revanche je ne vois pas de persist pour l'entité Document.

    -----
    Remarque annexe, ce code me parait redondant avec ce que fait déjà un formulaire Symfony (il appel les setter d'un objet et l'instancie si besoin puisque tu a mis l'option 'data_class'=> 'Asmolding\Bundle\Entity\TransferHistory', )
    un simple $form->getData() te renvoit un objet TranfertFTP tout neuf et déjà mappé au champs du formulaire, tu n'a plus qu'à appeler les champs non présent dans le formulaire ("companyFrom", etc...), à persister et à flusher

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut OK c'est parfait
    Merci arnooo999

    En fat, j'ai bêtement copié un code, que j'ai arrangé à ma sauce, avec mes set, et comme je ne voyais pas de setDocument() dans OC, je pensais que les événements Doctrine s'en occupaient... Quelle cruche je fais...

    Enfin, toujours est-il que ça fonctionne.

    Merci à toi, je passe en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] [Symfony2] Upload de plusieurs fichiers à la fois
    Par kevin_gay dans le forum Symfony
    Réponses: 1
    Dernier message: 05/09/2014, 11h25
  2. [web] upload fichier perl
    Par lilou0210 dans le forum Web
    Réponses: 3
    Dernier message: 04/11/2004, 08h13
  3. Réponses: 3
    Dernier message: 02/09/2004, 11h26
  4. [servlet]Upload Fichier su serveur
    Par mathk dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 21/04/2004, 10h24
  5. [Struts][Oracle]Upload fichier word dans une base
    Par Maximil ian dans le forum Struts 1
    Réponses: 7
    Dernier message: 10/02/2004, 15h52

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