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\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()
{
returnthis->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] - @ORM\OneToMany(targetEntity="Photocopieur", mappedBy="modele", cascade={"remove", "persist"})