[Symfony2] Formulaire/table jointure

Eléphanteau du PHP | 25 Messages

10 mai 2012, 16:36

Bonjour,

Je coince au niveau des formulaires.

Je me trouve dans une table de jointure qui permet de liée 3 tables.

Soit:
-Table1 -> Table des options
-Table2 -> Table des classes
-Table3 -> Table des livres
-Table4 ->Table de jointure.


Dans le fichier php de Form:
$builder
                // J'aimerais acceder à la table 1 pour y ajouter une nouvelle ligne
		->add('nomOption', 'text', array('read_only' => false , 'required' => true)) // Donc ici pour renseigner le nom
		->add('libelleOption', 'text', array('read_only'=>false, 'required' => true)) // Ici pour renseigner le libelle
		->add('classeclasse', 'entity', array('class' => 'LGB\BourseLivresBundle\Entity\Classe', 'property' => 'nom' , 'expanded' => true, 'multiple' => true, 'required' => true, 'label'=>" ")); // Ici pour afficher la liste des classes avec des checkbox
                ->add('livrelivre', 'entity', array('class' => 'LGB\BourseLivresBundle\Entity\Livre', 'property' => 'titre' , 'expanded' => true, 'multiple' => true, 'required' => true, 'label'=>" ")); // Ici pour afficher la liste des livres avec des checkbox
Dans le controller:
public function gestionOptionAjouterAction()
    {
		// On crée un nouveau objet ClasseHasOption.
		$Options = new Options();
		// On récupère le type crée dans AddOptionsType.php dans le dossier form.
		$form = $this->createForm(new AddOptionsType(), $Options);

		$request = $this->container->get('request');
		if( $request->getMethod() == 'POST' )
		{
			$form->bindRequest($request);
			if( $form->isValid() )
			{
				$connect = $this->getDoctrine()->getEntityManager();
				$connect->persist($Options);
				$connect->flush();
				
				// Envoie d'un message à la vue suivante // 
                $this->get('session')->setFlash('info', 'L\'option a bien été créé !');
				return $this->redirect( $this->generateUrl('\\ajouter') );
			}
		}

		return $this->render('LGBBourseLivresBundle:Admin:ajouterOptions.html.twig', array(
			'OptionsForm' => $form->createView(),
			));
    }
Dans le twig:
			<form action="" method="post" {{ form_enctype(OptionsForm) }}>
			    <table style="width: 100%">
				<tr>
					<td>
						{{ form_label(OptionsForm.nomOption, "Nom de l'option : ") }}
						{{ form_errors(OptionsForm.nomOption) }}
						{{ form_widget(OptionsForm.nomOption) }}
					</td>
					<td>
						{{ form_label(OptionsForm.libelleOption, "Libellé : ") }}
						{{ form_errors(OptionsForm.libelleOption) }}
						{{ form_widget(OptionsForm.libelleOption, {'attr': {'size': '50'}}) }}
					</td>
				</tr>
				</table>
				<table>
				<tr>
					<td>
					{{ form_label(OptionsForm.classeclasse, "Liste des classes :") }}</b><br><br>
					{{ form_errors(OptionsForm.classeclasse) }}
					{{ form_widget(OptionsForm.classeclasse, {'attr': {'class': 'checkbox'}}) }}
					</td>
				</tr>
				</table>

				<p style="display:block;">{{ form_rest(OptionsForm) }}</p>
				<hr>
				<br>
				<p style="text-align:right;"><input type="submit" value="Ajouter l'option" class="btn-success" /></p>
			</form>
J'ai mis la liste des livres en suspend vue que c'est la meme chose que pour les classes. ça ça fonctionne.
Mon problème est d'accédé en ecriture sur la table Option donc avec des cases à remplir. Pour en créer une nouvelle.

Merci d'avance de votre aide.

YoshV

Eléphanteau du PHP | 12 Messages

25 oct. 2012, 08:26

Bonjour à tous

J'ai un problème à peu près semblable. J'ai deux table CANDIDAT et LISTE et une table de jointure entre ces deux dernières que j'ai nommé CANDIDAT_LISTE. j'arrive à afficher les formulaires concernant CANDIDAT et LISTE mais les formulaires liés à la table de jointure CANDIDAT_Liste ne s'affichent pas! le message d'erreur semble m'indiqué que la classe Candidat_Liste.php n'existe pas! quand je fait du cache: clear , parfois il me change le message en me disant plutôt que la classe Candidat_ListeController n'existe pas. pourtant ces deux classes existent bel et bien dans les mêmes dossiers respectifs que ceux des classes Candidat et Liste. Je galère depuis des heures et bientôt une journée sur ça et je trouve pas la solution...Venez à mon aide s'il vous plaît.....