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 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'
));
}
/**
namespace StQuentin\ParcBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
@ORM\Entity(repositoryClass="StQuentin\ParcBundle\Repository\PhotocopieurRepository")
*/
class Photocopieur
{
/**
@ORM\ManyToMany(targetEntity="StQuentin\ParcBundle\Entity\Options", cascade={"persist"})
*/
private $option;
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
@return Photocopieur
*/
public function setNumeroDeSeriePhotocopieur($numeroDeSeriePhotocopieur)
{
$this->numeroDeSeriePhotocopieur = $numeroDeSeriePhotocopieur;
return $this;
}
/**
/**
@return Photocopieur
*/
public function setAdresseMacPhotocopieur($adresseMacPhotocopieur)
{
$this->adresseMacPhotocopieur = $adresseMacPhotocopieur;
return $this;
}
/**
/**
@return Photocopieur
*/
public function setMarque(\StQuentin\ParcBundle\Entity\Marque $marque)
{
$this->marque = $marque;
return $this;
}
/**
/**
@return Photocopieur
*/
public function setModele(\StQuentin\ParcBundle\Entity\Modele $modele)
{
$this->modele = $modele;
return $this;
}
/**
/**
@return Photocopieur
*/
public function addUtilisation(\StQuentin\ParcBundle\Entity\utilisation $utilisation)
{
$this->utilisation[] = $utilisation;
return $this;
}
/**
/**
/**
@return Photocopieur
*/
public function setAdresseIPPhotocopieur($adresseIPPhotocopieur)
{
$this->adresseIPPhotocopieur = $adresseIPPhotocopieur;
return $this;
}
/**
/**
@return Photocopieur
*/
public function setLocationachat(\StQuentin\ParcBundle\Entity\LocationAchat $locationachat)
{
$this->locationachat = $locationachat;
return $this;
}
/**
/**
@return Photocopieur
*/
public function addOption(\StQuentin\ParcBundle\Entity\Options $option)
{
$this->option[] = $option;
return $this;
}
/**
/**
/**
@return Photocopieur
*/
public function setNumeroGPI($numeroGPI)
{
$this->numeroGPI = $numeroGPI;
return $this;
}
/**
/**
@return Photocopieur
*/
public function setDirection(\StQuentin\ParcBundle\Entity\Direction $direction)
{
$this->direction = $direction;
return $this;
}
/**
namespace StQuentin\ParcBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
@ORM\Entity(repositoryClass="StQuentin\ParcBundle\Repository\OptionsRepository")
*/
class Options
{
/**
/**
/**
/**
/**
@return Options
*/
public function setLibelleOption($libelleOption)
{
$this->libelleOption = $libelleOption;
return $this;
}
/**
/**
@return Options
*/
public function setMontantOption($montantOption)
{
$this->montantOption = $montantOption;
return $this;
}
/**
/**
@return Options
*/
public function setModele(\StQuentin\ParcBundle\Entity\Modele $modele)
{
$this->modele = $modele;
return $this;
}
/**
namespace StQuentin\ParcBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
@ORM\Entity(repositoryClass="StQuentin\ParcBundle\Repository\ModeleRepository")
*/
class Modele
{
/**
/**
/**
/**
/**
/**
/**
/**
@return Modele
*/
public function setLibelleModele($libelleModele)
{
$this->libelleModele = $libelleModele;
return $this;
}
/**
/**
@return Modele
*/
public function addPhotocopieur(\StQuentin\ParcBundle\Entity\Photocopieur $photocopieur)
{
$this->photocopieur[] = $photocopieur;
return $this;
}
/**
/**
/**
@return Modele
*/
public function addMarque(\StQuentin\ParcBundle\Entity\Marque $marque)
{
$this->marque[] = $marque;
return $this;
}
/**
/**
/**
@return Modele
*/
public function setMarque(\StQuentin\ParcBundle\Entity\Marque $marque)
{
$this->marque = $marque;
return $this;
}
/**
@return Modele
*/
public function setCoutCopieConsommableCouleur($coutCopieConsommableCouleur)
{
$this->coutCopieConsommableCouleur = $coutCopieConsommableCouleur;
return $this;
}
/**
/**
@return Modele
*/
public function setCoutCopieConsommableNoir($coutCopieConsommableNoir)
{
$this->coutCopieConsommableNoir = $coutCopieConsommableNoir;
return $this;
}
/**
/**
@return Modele
*/
public function setMontantLoyer($montantLoyer)
{
$this->montantLoyer = $montantLoyer;
return $this;
}
/**
@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]