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] Formulaire dynamique sur plusieurs entités pas nécessairement en relation


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2014
    Messages : 24
    Points : 8
    Points
    8
    Par défaut [Symfony2] Formulaire dynamique sur plusieurs entités pas nécessairement en relation
    Bonjour à tous, je suis confronté à un cas particulier pour un formulaire dynamique sur Symfony.

    J'ai plusieurs entités: Parcsimmobilier.php, Ensembles.php, Batiments.php et Zonestechnique.php.

    Un Parcs peut avoir plusieurs ensembles (ManyToOne), un ensemble peut avoir plusieurs Batiments (ManyToOne) et un batiment peut avoir plusieurs Zonestechnique (ManyToOne).

    Je dois créer un formulaire dynamique selon ces relations, mais lors de la création d'une zone technique, je m'explique:

    1- La route appel un formulaire qui fait apparaître dans un select la liste de tous les parcs immobiliers

    2- Une fois mon parc choisit, une liste déroulante apparaît et cette liste est un select qui permet de choisir un ensemble appartenant au parc choisit à la base

    3- Une fois l'ensemble sélectionné, deux choix s'offre à l'utilisateur suivant la catégorie de la zone technique. Donc une fois l'ensemble sélectionne, les catégories de zones techniques apparaissent dans multiple select. Dans ces catégories, il y a la catégorie extérieure, si elle est sélectionné, une liste déroulante des bâtiments apparaît mais grisé avec la valeur "aucun". Par contre si la catégorie choisit n'est pas exterieure, une liste déroulante de tous les bâtiments appartenant à l'ensemble auparavant sélectionné apparaît.

    4- Une fois le batiments choisit (donc soit un bâtiment, soit la valeur "aucun"), le reste du formulaire pour la zone technique apparaît.

    Le problème, c'est que mon entité Zonestechnique.php n'est pas en relation avec Parcsimobilier.php ou Ensembles.php. Cette entité est juste en relation avec Batiments.php. Je vous avouerai ne pas trop savoir comment procéder.

    Voici le code pour Parcsimmobilier.php:
    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
     
    class Parcsimmobilier
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="nom", type="string", length=150, nullable=false)
         */
        private $nom;
     
         /**
         * @var \Doctrine\Common\Collections\Collection
         *
         * @ORM\OneToMany(targetEntity="Ensembles", mappedBy="parcsimmobilier")
         */
        private $ensembles;
    Le code pour Ensembles.php:
    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
     
    class Ensembles
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
         /**
         * @var string
         *
         * @ORM\Column(name="nom", type="string", length=150, nullable=false)
         */
        private $nom;
     
         /**
         * @var \Parcsimmobilier
         *
         * @ORM\ManyToOne(targetEntity="Parcsimmobilier")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="parcsimmobilier_id", referencedColumnName="id")
         * })
         */
        private $parcsimmobilier;
    Le code pour mon entité Batiments.php:
    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
     
    class Batiments
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="nom", type="string", length=150, nullable=true)
         */
        private $nom;
     
        /**
         * @var \Ensembles
         *
         * @ORM\ManyToOne(targetEntity="Ensembles")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="ensembles_id", referencedColumnName="id")
         * })
         */
        private $ensembles;
    Et enfin pour Zonestechnique.php:
    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
     
    class Zonestechnique
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="nom", type="string", length=150, nullable=false)
         */
        private $nom;
     
        /**
         * @var \Batiments
         *
         * @ORM\ManyToOne(targetEntity="Batiments")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="batiments_id", referencedColumnName="id")
         * })
         */
        private $batiments;
     
        /**
         * @var \Doctrine\Common\Collections\Collection
         *
         * @ORM\ManyToMany(targetEntity="Categorieszonestechnique")
         * @ORM\JoinTable(name="zonestechnique_categorieszonestechnique",
         *   joinColumns={
         *     @ORM\JoinColumn(name="zonestechnique_id", referencedColumnName="id")
         *   },
         *   inverseJoinColumns={
         *     @ORM\JoinColumn(name="categorieszonestechnique_id", referencedColumnName="id")
         *   }
         * )
         */
     
         private $categorieszonestechnique;
    J'ai essayé avec la doc ici mais je vous avoue que je ne sais pas vraiment comment procéder.

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 26
    Points
    26
    Par défaut
    Voila comment je fais souvent: je crée une entité dans laquelle je crée des propriétés de types classes concernées. et ensuite crée le formulaire en utilisant la fonction _toString() pour retourner la propriété voulue
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function _toStreing()
    {
        return $this-getNom;
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2014
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    zonzeriguezie, merci pour ta réponse. Peux tu m'en dire plus sur cette méthode, je ne vois pas du tout comment me servir des méthodes __toString() pour un formulaire.

  4. #4
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    tu peux créer un répertoire Model.
    Dans ce répertoire, tu créé une classe avec tes différentes valeurs.

    Puis, tu créé un formulaire depuis ce modèle.

    Pour chaque élément tu peux mettre un type entity, et faire la validation manuellement dans ton controlleur pour écrire dans telle ou telle classe et faire un persist.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2014
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Je pensais aussi à faire comme tu me le suggère. Créer un répertoire, faire mes querybuilder et afficher dynamiquement tous ça. C'est bien ce que tu veux dire? J'aimerai toutefois utiliser les EventListenner de symfony, ce qui me pose problème c'est bel et bien le fait que j'ai quatre entités à gérer sur ce formulaire selon certaines conditions.

Discussions similaires

  1. [2.x] Formulaire qui pioche sur plusieurs entités (+ sonata)
    Par Raphiduck dans le forum Symfony
    Réponses: 0
    Dernier message: 22/01/2014, 12h04
  2. Formulaire dynamique sur plusieurs pages
    Par LuffyyffuL dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 14/11/2013, 14h01
  3. Réponses: 5
    Dernier message: 10/05/2008, 18h11
  4. Réponses: 2
    Dernier message: 09/10/2004, 11h35
  5. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55

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