Bonjour,
je rencontre un souci pour créer un formulaire composé de plusieurs formulaires imbriqués.
j'ai deux types PhotocopyType et ReprographyType, qui contiennent plusieurs champs dont tous les deux un champ lié à une entité Binding.
Exemple pour la classe PhotocopyType (même chose pour reprographyType)
Le classe BindingKeyType :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class PhotocopyType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ... ->add('binding','impression_demand_binding_key', array( 'label' => 'demand.add_demand_binding.label', 'required' => true )); } }
Cette classe fait appel au service BindingService, qui est défini dans le fichier service.xml comme suit :
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 class BindingKeyType extends AbstractType { private $bindingService; /** * * @var string type de demande (photocopy ou reprography) */ private $type; public function __construct( BindingService $service) { $this->type = $type; $this->bindingService = $service; } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults( array( 'choices' => $this->bindingService->getBindingKeyChoices($this->type), 'preferred_choices' => $this->bindingService->getDefaultBindingKey($this->type), 'class' => 'ImpressionDemandBundle:Binding', 'property' =>'name', )); } public function getParent() { return 'entity'; } public function getName() { return 'impression_demand_binding_key'; } }Cela marche correctement mais je souhaiterais ajouter un papramètre qui permet de construire différemment la liste des choix de Binding selon que c'est PhotocopyType ou ReprographyType qui l'appelle.
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 impression_demand_binding_form_key: class: Impression\DemandBundle\Form\BindingKeyType arguments: [type, @impression_demand.service.binding_service] tags: - { name: form.type, alias: impression_demand_binding_key } impression_demand.service.binding_service: class: Impression\DemandBundle\Service\BindingService arguments: [@impression_demand.doctrine.binding_manager] calls: - [ setLogger, [@impression_user.logger]] impression_demand.doctrine.binding_manager: class: Impression\DemandBundle\Doctrine\BindingManager arguments: [@doctrine.orm.entity_manager,%impression_demand.entity.binding.class%]
J'ai essayé en passant par quelque chose du type new BindingKeyType($param), mais le problème est que dans ce cas le bindingService de la classe BindingKeyType n'est pas instancié.
Quelqu'un aurait-il une idée ?
Partager