Bonjour,
Je créé un formulaire à partir d'un modèle d'objets (ce ne sont pas des entités).
J'ai 2 modèles liés, le modèle ThirdParty contient une liste de SiteOptions.
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 class ThirdParty { /** * @var string|null */ private $gtfCode; /** * @var string */ private $name = ''; /** * @var Address|null * * @Assert\NotBlank() * @Assert\Valid() */ private $address; /** * @var float|null */ private $latitude; /** * @var float|null */ private $longitude; /** * @var string|null */ private $contact; /** * @var string|null */ private $phone; /** * @var string|null */ private $email; /** * @var string|null */ private $fax; /** * @var string|null */ private $comments; /** * @var string|null */ private $orderReference; /** * @var string|null */ private $code; /** * @var array|null */ private $siteOptions; public function __construct() { $this->address = new Address(); } /*getters/setters*/ }Je souhaite afficher une liste de checkbox pour chaque siteOptions, une checkbox est cochée en fonction de la valeur de "active".
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 class SiteOptions { /** * @var string * */ private $name; /** * @var string * */ private $code; /** * @var bool */ private $active = false; /*getters/setters*/ }
Jusque là tout va bien mais je n'arrive pas à personnaliser le label de mes checkboxes, pour le moment elles portent toutes le label "form.site_options.active", hors je voudrais que le label soit le "name" de mon objet.
Il est probable que je m'y prenne mal, j'ai voulu utiliser EntityType mais comme son nom l'indique, il faut travailler avec des entités...
Mes formtypes (j'ai supprimé le code qui nous intéressait pas) :
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
54
55
56
57
58
59 class SiteType extends AbstractType { /** * @var AuthorizationCheckerInterface */ private $authorizationChecker; /** * @var EntityManagerInterface */ private $em; /** * @var TokenStorageInterface */ private $tokenStorage; public function __construct( AuthorizationCheckerInterface $authorizationChecker, EntityManagerInterface $em, TokenStorageInterface $tokenStorage ) { $this->authorizationChecker = $authorizationChecker; $this->em = $em; $this->tokenStorage = $tokenStorage; } public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('site_options', CollectionType::class, [ 'allow_add' => false, 'allow_delete' => false, 'entry_type' => SiteOptionsType::class, 'prototype' => false, 'required' => false, ]) ; } public function configureOptions(OptionsResolver $resolver): void { $resolver ->setDefaults([ 'data_class' => ThirdParty::class, 'label_format' => 'form.site.%name%', 'custom_labels' => [ 'comments' => 'form.site.comments', 'name' => 'form.site.name', 'order_reference' => 'form.site.order_reference', ], 'role' => 'CAN_EDIT', ]) ->setRequired('edition_permissions_prefix') ; } }La portion du fichier twig concerné
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 class SiteOptionsType extends AbstractType { use FieldDisablingTrait; public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('active', CheckboxType::class, [ 'label_attr' => ['class' => 'simple-checkbox'], ]); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => SiteOptions::class, 'label_format' => 'form.site_options.%name%', 'role' => 'CAN_EDIT', ]); } }
Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <div class="form-group"> {% for optionField in form.delivery_site.site_options %} <div class="col-sm-6"> {{ form_widget(optionField) }} </div> {% endfor %} </div>
Si vous avez des idées, je suis preneuse car j'ai parcouru bcp de posts, lu et relu la doc symfony, je trouve rien qui puisse m'aider.
Merci !
Partager