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 :

File upload fichier non trouvé [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Points : 35
    Points
    35
    Par défaut File upload fichier non trouvé
    Bonjour,

    J'ai un petit soucis avec un formulaire d'upload de fichier, ce dernier m'indique qu'il ne trouve pas le fichier que j'ai sélectionné ??
    Si je supprime ce champ, l'enregistrement s'effectue bien pour les autres données (nom, prénom...)

    J'ai simplifié mon code pour que ce soit plus clair :


    Mon buildForm :
    Dans ma vue Twig :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {{ form_label(form.image) }}
    {{ form_errors(form.image) }}
    {{ form_widget(form.image) }}
    Dans 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
    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
    public function editerAction($id = null)
        {
            $message='';
            $em = $this->container->get('doctrine')->getEntityManager();
     
            if (isset($id)) 
            {
                // modification d’un profil existant : on recherche ses données
                $profil= $em->find('MyAppFilmothequeBundle:Profil', $id);
     
                if (!$profil)
                {
                    $message='Aucun profil trouvé';
                }
            }
            else 
            {
                // ajout d’un nouveau profil
                $profil= new Profil();
            }
     
            $form = $this->container->get('form.factory')->create(new ProfilForm(), $profil);
     
            $request = $this->container->get('request');
     
            if ($request->getMethod() == 'POST') 
            {
                $form->bindRequest($request);
     
                if ($form->isValid()) 
                {
                    $em->persist($profil);
                    $em->flush();
                    if (isset($id)) 
                    {
                        $message = $this->container->get('translator')->trans('profil.modifier.succes',array(
                                    '%nom%' => $profil->getNom(),
                                    '%prenom%' => $profil->getPrenom()
                                    ));
                    }
                    else 
                    {
                        $message = $this->container->get('translator')->trans('profil.ajouter.succes',array(
                                    '%nom%' => $profil->getNom(),
                                    '%prenom%' => $profil->getPrenom()
                                    ));
                    }
                }
            }
     
            return $this->container->get('templating')->renderResponse(
            'MyAppFilmothequeBundle:Profil:editer.html.twig',
                array(
                'form' => $form->createView(),
                'message' => $message,
                'profil' => $profil
                )
            );
        }
    Et dans mon entité, j'ai mis de quoi gérer l'upload de fichier :
    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
    <?php
     
    namespace MyApp\FilmothequeBundle\Entity;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * @orm\Entity
     * @ORM\HasLifecycleCallbacks
     */
    Class Profil
    {
      ......................
    /**
    	 * @orm\Column(type="string", length="255")
    	 * @Assert\File( maxSize = "1024k", mimeTypesMessage = "Please upload a valid Image")
    	 */
        protected $image;
     
        public function getFullImagePath() {
            return null === $this->image ? null : $this->getUploadRootDir(). $this->image;
        }
     
        protected function getUploadRootDir() {
            // the absolute directory path where uploaded documents should be saved
            return $this->getTmpUploadRootDir().$this->getId()."/";
        }
     
        protected function getTmpUploadRootDir() {
            // the absolute directory path where uploaded documents should be saved
            return __DIR__."/../Resources/images/";
        }
     
        /**
         * @ORM\PrePersist()
         * @ORM\PreUpdate()
         */
        public function uploadImage() {
            // the file property can be empty if the field is not required
            if (null === $this->image) {
                return;
            }
            if(!$this->id){
                $this->image->move($this->getTmpUploadRootDir(), $this->image->getClientOriginalName());
            }else{
                $this->image->move($this->getUploadRootDir(), $this->image->getClientOriginalName());
            }
            $this->setImage($this->image->getClientOriginalName());
        }
     
        /**
         * @ORM\PostPersist()
         */
        public function moveImage()
        {
            if (null === $this->image) {
                return;
            }
            if(!is_dir($this->getUploadRootDir())){
                mkdir($this->getUploadRootDir());
            }
            copy($this->getTmpUploadRootDir().$this->image, $this->getFullImagePath());
            unlink($this->getTmpUploadRootDir().$this->image);
        }
     
        /**
         * @ORM\PreRemove()
         */
        public function removeImage()
        {
            unlink($this->getFullImagePath());
            rmdir($this->getUploadRootDir());
        }
    Merci par avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    dans la fonction : removeImage() :

    Faut faire une condition if : s'il l'image existe alors il a supprime !! sinon un retour null si tu veux !!

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Points : 35
    Points
    35
    Par défaut
    J'ai rajouté la condition suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($image = $this->getFullImagePath()) {
                unlink($this->getFullImagePath());
    	    rmdir($this->getUploadRootDir());
    }
    Mais j'ai toujours le même message d'erreur, même si je mets rien dans la fonction removeImage...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    fais plutôt : if (null === $this->image) et un else ca devrait marcher

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Points : 35
    Points
    35
    Par défaut
    Merci pour ton aide,
    J'ai donc remplacer la fonction par ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (null === $this->image){
     
    }else{
          unlink($this->getFullImagePath());
          rmdir($this->getUploadRootDir());
    }
    Par contre j'ai toujours la même erreur.
    Et comme je l'ai mis plus haut, le plus bizarre c'est que quand je laisse cette fonction vide, j'ai tjs le même message d'erreur.

    Du coup j'ai tendance à penser que cela viendrait d'ailleurs...?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    Ta méthode est fausse la condition if ne sert a rien
    Essaye ca !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (null === $this->image){
     
          unlink($this->getFullImagePath());
          rmdir($this->getUploadRootDir());
    }
    C'est bete mais tu vas comprendre ca doit marcher cependant !!

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Points : 35
    Points
    35
    Par défaut
    Je pensais qu'il fallait supprimer l'image que si elle était renseignée...

    Dans tous les cas, j'ai mis ta fonction mais j'ai toujours le même message d'erreur

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    T'as du suivre un tuto différent de la doc officielle :
    http://symfony.com/doc/current/cookb...e_uploads.html

    dans la quelle se trouve la méthode pour effacer les fichiers uploadé ; essaye de faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function removeUpload()
        {
            if ($image = $this->getUploadRootDir()()) {
                unlink($image);
            }
    N'oublie pas de déclalarer removeUpload dans ton action de suppression dans le contrôleur !!

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Points : 35
    Points
    35
    Par défaut
    Bon j'ai pas tout compris, je suis reparti 2 fois from scratch pour bien comprendre, et la seconde fois avec un autre tuto, cela a fonctionné.
    Du coup je sais pas encore trop quelle était mon erreur mais je vais repartir de ce formulaire pour y intégrer le mien et essayer de voir les différences.

    J'ai remarqué un oubli que tu ne pouvais pas voir, j'avais oublié le "encrypt attribute" dans mon formulaire, et dans la doc il est précisé de le mettre.


    Par contre, lors de l'update, l'image se rajoute en plus dans mon répertoire, ce qui est plutôt ennuyeux.

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

Discussions similaires

  1. Fichier non trouvé, bien qu'existant
    Par ALT dans le forum Administration système
    Réponses: 18
    Dernier message: 30/03/2007, 10h21
  2. importation de données : fichier non trouvé
    Par sam01 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 18/01/2007, 14h38
  3. fichier non trouvé dans apache?
    Par darkbob dans le forum Web
    Réponses: 1
    Dernier message: 18/07/2006, 03h03
  4. Création version client - fichiers non trouvés
    Par Pascal dans le forum WinDev
    Réponses: 7
    Dernier message: 03/12/2004, 11h34
  5. [Debutant][Install][VS]erreur sur fichier non trouvé.
    Par silvermoon dans le forum DirectX
    Réponses: 4
    Dernier message: 16/07/2004, 20h59

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