IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Initialiser des valeurs de formulaires par des valeurs provenant d'entités différentes


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Par défaut Initialiser des valeurs de formulaires par des valeurs provenant d'entités différentes
    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

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu peut le faire sur la page html.twig si tu envoie bien ton formulaire et les info que tu veut rentrer par défaut via le controller on n'a pas besoin de faire de fonction en php puisque symfony peut déja envoyer des données a la vue via le controller .

Discussions similaires

  1. [AC-2010] Filter un formulaire par des valeurs d'une requête
    Par Venentius dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 15/04/2016, 18h07
  2. Réponses: 8
    Dernier message: 11/02/2011, 00h33
  3. Réponses: 3
    Dernier message: 03/09/2009, 15h00
  4. probleme d'initialisation des valeurs
    Par TheJoe dans le forum JSF
    Réponses: 9
    Dernier message: 11/12/2007, 16h53
  5. initialisation des valeurs de formulaires
    Par sunwind dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/06/2007, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo