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 :

[entity] manipulation d'un champ


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Par défaut [entity] manipulation d'un champ
    Bonsoir à tous,

    je plante le décore! dans mon application, j'ai une entité appartement qui est constituée de divers champs.. (nombre de pièce, surface, etc.). j'ai une autre entité qui est appartImg qui est donc des images associés à un appartement.
    J'ai donc créé une relation OneToMany:

    dans l'entity appartement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        /**
         * @ORM\OneToMany(targetEntity="appartImg", mappedBy="appartement")
         */
        protected $appartImg;
     
        public function __construct()
        {
            $this->products = new ArrayCollection();
        }
    dans l'entity appartImg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        /**
         * @ORM\ManyToOne(targetEntity="appartement", inversedBy="appartImg")
         * @ORM\JoinColumn(name="photoid", referencedColumnName="id")
         */
        protected $appartement;
    par la suite j'ai donc crée dans mon controler tout ce qu'il faut pour uploader mes images comme indiqué dans la doc http://symfony.com/fr/doc/current/co...e_uploads.html

    dans l'entity il y à donc plusieurs fonction afin de gérer l'upload ( initialisation des path , puis bouger le fichier au bon endroit) cf

    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
     
        public function getAbsolutePath()
        {
            return null === $this->path ? null : $this->getUploadRootDir().'/'.$this->path;
        }
     
        public function getWebPath()
        {
            return null === $this->path ? null : $this->getUploadDir().'/'.$this->path;
        }
     
        protected function getUploadRootDir()
        {
            // le chemin absolu du répertoire où les documents uploadés doivent être sauvegardés
            return __DIR__.'/../../../../web/'.$this->getUploadDir();
     
        }
     
        protected function getUploadDir()
        {
            // on se débarrasse de « __DIR__ » afin de ne pas avoir de problème lorsqu'on affiche
            // le document/image dans la vue.
            // echo $this->getPhotoid(); .
            return '/img/appartements/';
        }
     
     
     
     
        /////////////////////////////////////////////////////////////////////////////////
     
        /**
         * @ORM\PrePersist()
         * @ORM\PreUpdate()
         */
        public function preUpload()
        {
            if (null !== $this->file) {
                // faites ce que vous voulez pour générer un nom unique
                $this->path = sha1(uniqid(mt_rand(), true)).'.'.$this->file->guessExtension();
            }
        }
     
        /**
         * @ORM\PostPersist()
         * @ORM\PostUpdate()
         */
        public function upload()
        {
            if (null === $this->file) {
                return;
            }
     
            // s'il y a une erreur lors du déplacement du fichier, une exception
            // va automatiquement être lancée par la méthode move(). Cela va empêcher
            // proprement l'entité d'être persistée dans la base de données si
            // erreur il y a
     
            $this->file->move($this->getUploadRootDir(), $this->path);
     
            unset($this->file);
        }
     
     
        /**
         * @ORM\PostRemove()
         */
        public function removeUpload()
        {
            if ($file = $this->getAbsolutePath()) {
                unlink($file);
            }
        }
    cela fonctionne parfaitement et mes photos sont bien dans /img/appartements/'.

    Maintenant mon but est d'uloader mes photos en fonction 'photoid' c'est a dire dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /img/appartements/$photoid
    j'ai donc utilisé la fonction getPhotoid (créé par symfony) qui "devrait" me retourner mon $photoid et concaténer le tout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            protected function getUploadRootDir()
        {
            // le chemin absolu du répertoire où les documents uploadés doivent être sauvegardés
            return __DIR__.'/../../../../web/'.$this->getUploadDir();
     
        }
     
        protected function getUploadDir()
        {
            // on se débarrasse de « __DIR__ » afin de ne pas avoir de problème lorsqu'on affiche
            // le document/image dans la vue.
            // echo $this->getPhotoid(); .
            return '/img/appartements/'.$this->getphotoid();
        }
    voilà bien sur cela ne fonctionne pas mon image est toujours dans '/img/appartements/'

    Merci pour votre aide.


  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    c'est dans le preupload que tu dois modifier le repertoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public function preUpload()
        {
            if (null!=$this->file && $this->getDoUpload()) {
                // faites ce que vous voulez pour générer un nom unique
                $this->path = 'monChemin'.'/'.$this->file->getClientOriginalName();
    ...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Par défaut
    Merci Dukoid,

    oui je suis d'accord, mais je veux que mon chemin d'upload vari en fonction de mon $photoid qui est d'ailleurs l'id d'appartement!

    mon problème est que je n'arrive pas récup mon photoid même en appelant getPhotoid.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 25
    Par défaut
    Un bundle qui peut te simplifier la tâche: https://github.com/dustin10/VichUplo...s/doc/index.md

    Il suffirait de définir un DirectoryNamer (service très simple) chargé de définir le nom du dossier.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Par défaut
    ok merci, mais il y a pas moyen de faire ça directement sans ajouter un bundle?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Par défaut
    Personne, pour une solution directement dans l'entity?

Discussions similaires

  1. [WD9] Manipulation d'un champ combo
    Par infhaddar dans le forum WinDev
    Réponses: 6
    Dernier message: 15/06/2010, 19h32
  2. Problème de manipulation avec un champ Label
    Par Minos2 dans le forum Apple
    Réponses: 2
    Dernier message: 19/01/2010, 14h30
  3. manipulation d un champ de type datetime
    Par decisionnel dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/07/2009, 09h14
  4. manipulation complexe de champ
    Par PAYASS59 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/09/2007, 16h42
  5. manipulation d'un champ de type Memo
    Par ivanleterrible dans le forum Bases de données
    Réponses: 6
    Dernier message: 29/05/2006, 21h53

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