Bonjour,

Je cherche la solution la plus "élégante" pour initialiser des valeurs d'un formulaire via des valeurs obtenues d'instances d'entités différentes.

Ci-dessous mon code actuel :

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
 
//ServerType.php
class ServerType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('Name', TextType::class, [
                'required' => true,
            ])
            ->add('CPU', TextType::class, [
                'empty_data' => '',
                'required' => false,
                'attr' => [
                    'size' => '4',
                ],
            ])
            ->add('RAM', TextType::class, [
                'empty_data' => '',
                'required' => false,
                'attr' => [
                    'size' => '6',
                ]
            ])
            ->addEventSubscriber(new ServerCreateSubscriber())
        ;
    }
}
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
 
// ServerCreateSubscriber.php
class ServerCreateSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [FormEvents::POST_SET_DATA => 'onPostSetData'];
    }
 
    public function onPostSetData(FormEvent $event) {
        $form = $event->getForm();
        $entity = $event->getData();
 
        if ($entity == null) {
            $form->get('CPU')->setData('2');
            $form->get('RAM')->setData('4096');
        }
    }
}
Ces deux morceaux de code me permettent d'initialiser un formulaire de création de serveur et de fournir à l'utilisateur des valeurs par défaut au moment de la création d'un nouveau serveur.

Pour information, un "server" appartient à une "company" grâce à une relation One-To-Many (une company détient un ou plusieurs serveurs). Le code ci-dessous décrit le formulaire qui représente une "company"

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
 
// CompanyType.php
class CompanyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('Name', TextType::class)
            ->add('CPU', TextType::class, [
                'empty_data' => '',
                'required' => false,
                'attr' => [
                    'size' => '4',
                ],
            ])
            ->add('RAM', TextType::class, [
                'empty_data' => '',
                'required' => false,
                'attr' => [
                    'size' => '6',
                ]
            ])
        ;
    }
}
J'aurai souhaité utiliser les valeurs company.CPU et company.RAM comme valeurs par défaut dans mon formulaire serverType plutôt que les valeurs fixées à la main dans le code.

Je ne vois pas comment (ni où, bien que le subscriber me semble être le fichier le plus pertinent) "injecter" l'instance de l'entité company sur laquelle l'utilisateur est en train de travailler et donc récupérer les informations qui m'intéressent.

Il faut savoir que pour le moment, le lien entre la company et le serveur est fait au niveau du contrôleur avec un simple $company->addServer($server) et que dans ce controleur qui appelle le formulaire de création de serveurs, la company est connue.

Merci par avance pour vos pistes