Bonjour,

Je suis en train de développer une application pour gérer des photocopieurs, un photocopieur a une marque un modèle et des options (fax, etc...).

J'aimerais pouvoir filtrer les options dans un formulaire (j'y arrive dans un affichage avec des query_builder), mais je n'arrive pas a filtrer dans un formulaire (Form de symfony, donc le formulaire est externaliser).

Le photocopieur est ajouter a posteriori sans option, dans l'ihm il y a un lien pour ajouter les options a un modèle précis.

Je précise rapidement les liaisons entre les tables :

Liaison entre Photocopieur et Option N.N.

Liaison entre Option et Modèle, une option a un modèle, un modèle peut avoir plusieurs options.

Liaison entre Photocopieur et Modèle, un photocopieur a un modèle, un modèle a plusieurs photocopieurs.

Pouvez-vous m'aidez.

Je vous propose le code qui affiche toutes les options sans restriction, j'ai essayer plusieurs méthode mais je n'arrive pas a filtrer cette maudite liste d'options dans un formulaire.

La validation s'effectue depuis symfony, pas d'ajax ou autre.

[code]<?php

namespace StQuentin\ParcBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use StQuentin\ParcBundle\Entity\Photocopieur;

class OptionPhotocopieurType extends AbstractType
{
/**

  • @param FormBuilderInterface $builder
  • @param array $options
    */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder
    ->add('option', 'entity',
    array(
    'class' => 'StQuentinParcBundle:options',
    'property' => 'libelleOption',
    'expanded' => 'true',
    'multiple' => 'true',
    ))
    ;
    }

    /**

  • @param OptionsResolverInterface $resolver
    */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
    $resolver->setDefaults(array(
    'data_class' => 'StQuentin\ParcBundle\Entity\Photocopieur'
    ));
    }

    /**

  • @return string
    */
    public function getName()
    {
    return 'stquentin_parcbundle_photocopieur';
    }
    }[/code]
    [code]<?php

namespace StQuentin\ParcBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**

  • Photocopieur
  • @ORM\Table()
  • @ORM\Entity(repositoryClass="StQuentin\ParcBundle\Repository\PhotocopieurRepository")
    */
    class Photocopieur
    {
    /**

    • @ORM\ManyToOne(targetEntity="StQuentin\ParcBundle\Entity\Modele", cascade={"persist"})
    • @ORM\JoinColumn(nullable=false)
      */
      private $modele;
      /**
    • @ORM\ManyToOne(targetEntity="StQuentin\ParcBundle\Entity\Marque", cascade={"persist"})
    • @ORM\JoinColumn(nullable=false)
      */
      private $marque;
      /**
    • @ORM\ManyToMany(targetEntity="StQuentin\ParcBundle\Entity\Options", cascade={"persist"})
      */
      private $option;

      /**

      • @ORM\OneToMany(targetEntity="Utilisation", mappedBy="photocopieur", cascade={"remove", "persist"})
        */

    /**

    • @ORM\ManyToOne(targetEntity="StQuentin\ParcBundle\Entity\Direction", cascade={"persist"})
    • @ORM\JoinColumn(nullable=false)
      */
      private $direction;
      /**
    • @ORM\OneToMany(targetEntity="utilisation", mappedBy="Photocopieur"), cascade={"persist"})
      */
      protected $utilisation;

    /**

    • @ORM\ManyToOne(targetEntity="StQuentin\ParcBundle\Entity\LocationAchat", cascade={"persist"})
    • @ORM\JoinColumn(nullable=false)
      */
      private $locationachat;

    /**

    • @var integer
    • @ORM\Column(name="id", type="integer")
    • @ORM\Id
    • @ORM\GeneratedValue(strategy="AUTO")
      */
      private $id;

    /**

    • @var string
    • @ORM\Column(name="numeroDeSeriePhotocopieur", type="string", length=255)
      */
      private $numeroDeSeriePhotocopieur;

    /**

    • @var string
    • @ORM\Column(name="numeroGPI", type="string", length=255)
      */
      private $numeroGPI;

    /**

    • @var string
    • @ORM\Column(name="adresseMacPhotocopieur", type="string", length=255, nullable=true)
      */
      private $adresseMacPhotocopieur;

    /**

    • @var string
    • @ORM\Column(name="adresseIPPhotocopieur", type="string", length=255, nullable=true)
      */
      private $adresseIPPhotocopieur;

    /**

    • Get id
    • @return integer
      */
      public function getId()
      {
      return $this->id;
      }

    /**

    • Set numeroDeSeriePhotocopieur
    • @param string $numeroDeSeriePhotocopieur
    • @return Photocopieur
      */
      public function setNumeroDeSeriePhotocopieur($numeroDeSeriePhotocopieur)
      {
      $this->numeroDeSeriePhotocopieur = $numeroDeSeriePhotocopieur;

      return $this;
      }

    /**

    • Get numeroDeSeriePhotocopieur
    • @return string
      */
      public function getNumeroDeSeriePhotocopieur()
      {
      return $this->numeroDeSeriePhotocopieur;
      }

    /**

    • Set adresseMacPhotocopieur
    • @param string $adresseMacPhotocopieur
    • @return Photocopieur
      */
      public function setAdresseMacPhotocopieur($adresseMacPhotocopieur)
      {
      $this->adresseMacPhotocopieur = $adresseMacPhotocopieur;

      return $this;
      }

    /**

    • Get adresseMacPhotocopieur
    • @return string
      */
      public function getAdresseMacPhotocopieur()
      {
      return $this->adresseMacPhotocopieur;
      }

    /**

    • Set marque
    • @param \StQuentin\ParcBundle\Entity\Marque $marque
    • @return Photocopieur
      */
      public function setMarque(\StQuentin\ParcBundle\Entity\Marque $marque)
      {
      $this->marque = $marque;

      return $this;
      }

    /**

    • Get marque
    • @return \StQuentin\ParcBundle\Entity\Marque
      */
      public function getMarque()
      {
      return $this->marque;
      }

    /**

    • Set modele
    • @param \StQuentin\ParcBundle\Entity\Modele $modele
    • @return Photocopieur
      */
      public function setModele(\StQuentin\ParcBundle\Entity\Modele $modele)
      {
      $this->modele = $modele;

      return $this;
      }

    /**

    • Get modele
    • @return \StQuentin\ParcBundle\Entity\Modele
      */
      public function getModele()
      {
      return $this->modele;
      }
      /**
    • Constructor
      */
      public function __construct()
      {
      $this->utilisation = new \Doctrine\Common\Collections\ArrayCollection();
      $this->locationachat = new \Doctrine\Common\Collections\ArrayCollection();
      $this->consommation = new \Doctrine\Common\Collections\ArrayCollection();
      }

    /**

    • Add utilisation
    • @param \StQuentin\ParcBundle\Entity\utilisation $utilisation
    • @return Photocopieur
      */
      public function addUtilisation(\StQuentin\ParcBundle\Entity\utilisation $utilisation)
      {
      $this->utilisation[] = $utilisation;

      return $this;
      }

    /**

    • Remove utilisation
    • @param \StQuentin\ParcBundle\Entity\utilisation $utilisation
      */
      public function removeUtilisation(\StQuentin\ParcBundle\Entity\utilisation $utilisation)
      {
      $this->utilisation->removeElement($utilisation);
      }

    /**

    • Get utilisation
    • @return \Doctrine\Common\Collections\Collection
      */
      public function getUtilisation()
      {
      return $this->utilisation;
      }

    /**

    • Set adresseIPPhotocopieur
    • @param string $adresseIPPhotocopieur
    • @return Photocopieur
      */
      public function setAdresseIPPhotocopieur($adresseIPPhotocopieur)
      {
      $this->adresseIPPhotocopieur = $adresseIPPhotocopieur;

      return $this;
      }

    /**

    • Get adresseIPPhotocopieur
    • @return string
      */
      public function getAdresseIPPhotocopieur()
      {
      return $this->adresseIPPhotocopieur;
      }

    /**

    • Set locationachat
    • @param \StQuentin\ParcBundle\Entity\LocationAchat $locationachat
    • @return Photocopieur
      */
      public function setLocationachat(\StQuentin\ParcBundle\Entity\LocationAchat $locationachat)
      {
      $this->locationachat = $locationachat;

      return $this;
      }

    /**

    • Get locationachat
    • @return \StQuentin\ParcBundle\Entity\LocationAchat
      */
      public function getLocationachat()
      {
      return $this->locationachat;
      }

    /**

    • Add option
    • @param \StQuentin\ParcBundle\Entity\Options $option
    • @return Photocopieur
      */
      public function addOption(\StQuentin\ParcBundle\Entity\Options $option)
      {
      $this->option[] = $option;

      return $this;
      }

    /**

    • Remove option
    • @param \StQuentin\ParcBundle\Entity\Options $option
      */
      public function removeOption(\StQuentin\ParcBundle\Entity\Options $option)
      {
      $this->option->removeElement($option);
      }

    /**

    • Get option
    • @return \Doctrine\Common\Collections\Collection
      */
      public function getOption()
      {
      return $this->option;
      }

    /**

    • Set numeroGPI
    • @param string $numeroGPI
    • @return Photocopieur
      */
      public function setNumeroGPI($numeroGPI)
      {
      $this->numeroGPI = $numeroGPI;

      return $this;
      }

    /**

    • Get numeroGPI
    • @return string
      */
      public function getNumeroGPI()
      {
      return $this->numeroGPI;
      }

    /**

    • Set direction
    • @param \StQuentin\ParcBundle\Entity\Direction $direction
    • @return Photocopieur
      */
      public function setDirection(\StQuentin\ParcBundle\Entity\Direction $direction)
      {
      $this->direction = $direction;

      return $this;
      }

    /**

    • Get direction
    • @return \StQuentin\ParcBundle\Entity\Direction
      */
      public function getDirection()
      {
      return $this->direction;
      }
      }[/code]
      [code]<?php

namespace StQuentin\ParcBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**

  • Options
  • @ORM\Table()
  • @ORM\Entity(repositoryClass="StQuentin\ParcBundle\Repository\OptionsRepository")
    */
    class Options
    {
    /**

    • @ORM\ManyToOne(targetEntity="StQuentin\ParcBundle\Entity\Modele", cascade={"persist"})
    • @ORM\JoinColumn(nullable=false)
      */
      private $modele;
      /**
      • @var integer
      • @ORM\Column(name="id", type="integer")
      • @ORM\Id
      • @ORM\GeneratedValue(strategy="AUTO")
        */
        private $id;

    /**

    • @var string
    • @ORM\Column(name="libelleOption", type="string", length=255)
      */
      private $libelleOption;

    /**

    • @var float
    • @ORM\Column(name="montantOption", type="float", scale=5, nullable=true)
      */
      private $montantOption;

    /**

    • Get id
    • @return integer
      */
      public function getId()
      {
      return $this->id;
      }

    /**

    • Set libelleOption
    • @param string $libelleOption
    • @return Options
      */
      public function setLibelleOption($libelleOption)
      {
      $this->libelleOption = $libelleOption;

      return $this;
      }

    /**

    • Get libelleOption
    • @return string
      */
      public function getLibelleOption()
      {
      return $this->libelleOption;
      }

    /**

    • Set montantOption
    • @param float $montantOption
    • @return Options
      */
      public function setMontantOption($montantOption)
      {
      $this->montantOption = $montantOption;

      return $this;
      }

    /**

    • Get montantOption
    • @return float
      */
      public function getMontantOption()
      {
      return $this->montantOption;
      }
      /**
    • Constructor
      */
      public function __construct()
      {
      $this->locationachat = new \Doctrine\Common\Collections\ArrayCollection();
      }

    /**

    • Set modele
    • @param \StQuentin\ParcBundle\Entity\Modele $modele
    • @return Options
      */
      public function setModele(\StQuentin\ParcBundle\Entity\Modele $modele)
      {
      $this->modele = $modele;

      return $this;
      }

    /**

    • Get modele
    • @return \StQuentin\ParcBundle\Entity\Modele
      */
      public function getModele()
      {
      return $this->modele;
      }
      }[/code]
      [code]<?php

namespace StQuentin\ParcBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**

  • Modele
  • @ORM\Table()
  • @ORM\Entity(repositoryClass="StQuentin\ParcBundle\Repository\ModeleRepository")
    */
    class Modele
    {
    /**

    • @ORM\OneToMany(targetEntity="Photocopieur", mappedBy="modele", cascade={"remove", "persist"})
      */
      protected $photocopieur;
      /**
      • @ORM\ManyToOne(targetEntity="StQuentin\ParcBundle\Entity\Marque", cascade={"persist"})
      • @ORM\JoinColumn(nullable=false)
        */
        private $marque;

    /**

    • @var integer
    • @ORM\Column(name="id", type="integer")
    • @ORM\Id
    • @ORM\GeneratedValue(strategy="AUTO")
      */
      private $id;

    /**

    • @var string
    • @ORM\Column(name="libelleModele", type="string", length=255)
      */
      private $libelleModele;

    /**

    • @var float
    • @ORM\Column(name="coutCopieConsommableCouleur", type="float", scale=5, nullable=true)
      */
      private $coutCopieConsommableCouleur;

    /**

    • @var float
    • @ORM\Column(name="coutCopieConsommableNoir", type="float", scale=5, nullable=true)
      */
      private $coutCopieConsommableNoir;

    /**

    • @var float
    • @ORM\Column(name="montantLoyer", type="float", scale=5, nullable=true)
      */
      private $montantLoyer;

    /**

    • Get id
    • @return integer
      */
      public function getId()
      {
      return $this->id;
      }

    /**

    • Set libelleModele
    • @param string $libelleModele
    • @return Modele
      */
      public function setLibelleModele($libelleModele)
      {
      $this->libelleModele = $libelleModele;

      return $this;
      }

    /**

    • Get libelleModele
    • @return string
      */
      public function getLibelleModele()
      {
      return $this->libelleModele;
      }
      /**
    • Constructor
      */
      public function __construct()
      {
      $this->photocopieur = new \Doctrine\Common\Collections\ArrayCollection();
      }

    /**

    • Add photocopieur
    • @param \StQuentin\ParcBundle\Entity\Photocopieur $photocopieur
    • @return Modele
      */
      public function addPhotocopieur(\StQuentin\ParcBundle\Entity\Photocopieur $photocopieur)
      {
      $this->photocopieur[] = $photocopieur;

      return $this;
      }

    /**

    • Remove photocopieur
    • @param \StQuentin\ParcBundle\Entity\Photocopieur $photocopieur
      */
      public function removePhotocopieur(\StQuentin\ParcBundle\Entity\Photocopieur $photocopieur)
      {
      $this->photocopieur->removeElement($photocopieur);
      }

    /**

    • Get photocopieur
    • @return \Doctrine\Common\Collections\Collection
      */
      public function getPhotocopieur()
      {
      return $this->photocopieur;
      }

    /**

    • Add marque
    • @param \StQuentin\ParcBundle\Entity\Marque $marque
    • @return Modele
      */
      public function addMarque(\StQuentin\ParcBundle\Entity\Marque $marque)
      {
      $this->marque[] = $marque;

      return $this;
      }

    /**

    • Remove marque
    • @param \StQuentin\ParcBundle\Entity\Marque $marque
      */
      public function removeMarque(\StQuentin\ParcBundle\Entity\Marque $marque)
      {
      $this->marque->removeElement($marque);
      }

    /**

    • Get marque
    • @return \Doctrine\Common\Collections\Collection
      */
      public function getMarque()
      {
      return $this->marque;
      }

    /**

    • Set marque
    • @param \StQuentin\ParcBundle\Entity\Marque $marque
    • @return Modele
      */
      public function setMarque(\StQuentin\ParcBundle\Entity\Marque $marque)
      {
      $this->marque = $marque;

      return $this;
      }

    /**

    • Set coutCopieConsommableCouleur
    • @param float $coutCopieConsommableCouleur
    • @return Modele
      */
      public function setCoutCopieConsommableCouleur($coutCopieConsommableCouleur)
      {
      $this->coutCopieConsommableCouleur = $coutCopieConsommableCouleur;

      return $this;
      }

    /**

    • Get coutCopieConsommableCouleur
    • @return float
      */
      public function getCoutCopieConsommableCouleur()
      {
      return $this->coutCopieConsommableCouleur;
      }

    /**

    • Set coutCopieConsommableNoir
    • @param float $coutCopieConsommableNoir
    • @return Modele
      */
      public function setCoutCopieConsommableNoir($coutCopieConsommableNoir)
      {
      $this->coutCopieConsommableNoir = $coutCopieConsommableNoir;

      return $this;
      }

    /**

    • Get coutCopieConsommableNoir
    • @return float
      */
      public function getCoutCopieConsommableNoir()
      {
      return $this->coutCopieConsommableNoir;
      }

    /**

    • Set montantLoyer
    • @param float $montantLoyer
    • @return Modele
      */
      public function setMontantLoyer($montantLoyer)
      {
      $this->montantLoyer = $montantLoyer;

      return $this;
      }

    /**

    • Get montantLoyer
    • @return float
      */
      public function getMontantLoyer()
      {
      return $this->montantLoyer;
      }
      }
      public function ajouterPhotocopieurAction()
      {
      $photocopieur = new Photocopieur;
      $form = $this->createForm(new PhotocopieurType, $photocopieur);
      $request = $this->get('request');
      if ($request->getMethod() == 'POST') {
      $url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
      $form->bind($request);
      if ($form->isValid()) {
      $em = $this->getDoctrine()->getManager();
      $em->persist($photocopieur);
      $em->flush();

      return $this->redirect($this->generateUrl('st_quentin_parc_accueilPhotocopieur'));
      }
      }
      return $this->render('StQuentinParcBundle:Parc/Photocopieur:ajoutPhotocopieur.html.twig', array(
      'form' => $form->createView(),
      ));
      }

    public function ajouterOptionPhotocopieurAction(Photocopieur $photocopieur)
    {
    $form = $this->createForm(new OptionPhotocopieurEditType(), $photocopieur);
    $request = $this->get('request');
    if ($request->getMethod() == 'POST') {
    $url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    $form->bind($request);
    if ($form->isValid()) {
    $em = $this->getDoctrine()->getManager();
    $em->persist($photocopieur);
    $em->flush();

        // On définit un message flash
    $this->get('session')->getFlashBag()->add('info', 'Option du Photocopieur bien ajouté');
    
    return $this->redirect($this->generateUrl('st_quentin_parc_accueilPhotocopieur', array('id' => $photocopieur->getId())));

    }
    }
    [/code]

Aucune réponse