Bonjour,
Je viens ici pour exposer mon problème pour avoir votre avis car certaines personnes me disent que ce n'est pas possible.
donc voilà je suis en train de faire un formulaire pour que le joueur puisse choisit un monstre qui est lié à la ville où se trouve le joueur, j'ai donc fait ceci:
TownController.php
TownMonsterType.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 /** * @Security("has_role('ROLE_USER_WITH_CHARACTER') or has_role('ROLE_USER_MODERATOR') or has_role('ROLE_USER_ADMINISTRATOR')") */ public function dungeonAction(Request $request) { $town = $this->getUser()->getCharacter()->getTown(); $form = $this->get('form.factory')->create(TownMonsterType::class, $town); if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($character); $em->flush(); return $this->redirectToRoute('car_caranille_town_dungeon'); } } return $this->render('CARCaranilleBundle:Town:Dungeon.html.twig', array('form' => $form->createView())); }
MonsterRepository.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
45
46
47
48
49
50
51
52
53 <?php namespace CAR\CaranilleBundle\Form; use CAR\CaranilleBundle\Repository\MonsterRepository; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; class TownMonsterType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $town = $builder->getData()->getID(); $builder ->add('monster', EntityType::class, array( 'class' => 'CARCaranilleBundle:Monster', 'label' => 'Monstre: ', 'choice_label' => 'name', 'multiple' => false, 'query_builder' => function(MonsterRepository $repository) use($town) { return $repository->getMonsterListBuilder($town); })) ->add('save', SubmitType::class); } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'CAR\CaranilleBundle\Entity\Town' )); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'car_caranillebundle_town'; } }
Pourtant dans l'entité Town il y a une liaison ManyToMany vers Monster de façon bidirectionnelle
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 <?php namespace CAR\CaranilleBundle\Repository; /** * MonsterRepository * * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ class MonsterRepository extends \Doctrine\ORM\EntityRepository { public function getMonsterListBuilder($town) { return $this ->createQueryBuilder('c') ->where('c.town = :town') ->setParameter('town', $town); } }
Town.php
Sauf que cela ne fonctionne pas car il me dit:
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 <?php namespace CAR\CaranilleBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Town * * @ORM\Table(name="caranille_town") * @ORM\Entity(repositoryClass="CAR\CaranilleBundle\Repository\TownRepository") */ class Town { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\ManyToMany(targetEntity="CAR\CaranilleBundle\Entity\Monster", mappedBy="town")) */ private $monster; ...
[Semantical Error] line 0, col 59 near 'town = :town': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
De plus je penses que envoyer l'id de la ville dans un query_builder est un peu moche car si je me suis embêté à faire une relation town <= > monster c'est bien pour l'utiliser sans devoir faire de requête ^^
Donc comment faire en sorte que le menu déroulant affiche bien les monstres lié à cette ville ?
Cordialement,
Partager