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 :

Externalisation formulaires sans classes [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut Externalisation formulaires sans classes
    Bonjour à tous !

    Je dois développer dans le cadre d'un projet assez lourd des formulaires sans classes. Sans m'étendre trop, je ne peux pas créer de classe car les champs affichés et/ou récupérés de la base de données sont définis dans un fichier de configuration, pour que l'administrateur (semi-technique donc) puisse les modifier.

    J'ai donc créé des formulaires à l'intérieur de mes contrôleurs à l'aide de code de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $form = $this->createFormBuilder();
    $form->add('champ', 'widget', $options);
    //...
    $form->getForm();
    Cette méthode marche très bien, sauf que si je dois afficher le formulaire à plusieurs endroits, je dois tout re-écrire à chaque fois. Je souhaite donc externaliser ce formulaire. J'imagine que je dois créer une classe à part, mais faut-il qu'elle hérite d'un contrôleur, pour récupérer les méthodes de création de formBuilder ?
    Si quelqu'un pouvait m'aiguiller...

    Merci d'avance !

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Qu'est ce qui t'empêche de suivre la méthode standard d'externalisation de ton formulaire dans une classe (http://symfony.com/fr/doc/current/bo...g-form-classes) et de simplement lui passer les informations nécessaires à l'ajout des champs via le constructeur (en lui passant un array décrivant les différents champs et leurs caractéristiques j'imagine)... ?

  3. #3
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    La méthode la plus simple est de créer un Type dans ton bundle puis de l'utiliser en tant que service.

    Dans myBundle/Form/Type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class myType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('myField', 'text')
            // tes autres champs
                ->add('submit', 'submit');
        }
     
        public function getName()
        {
            return 'myType';
        }
    }
    Dans myBundle/Resources/config/services.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <parameters>
    <parameter key="my_type.class">myBundle\Form\Type\myType</parameter>
    </parameters>
     
    <services>
    <service id="my_type" class="%my_type.class%">
                <tag name="my.type" alias="my_type"/>
            </service>
    </services>
    Puis dans n'importe lequel de tes controller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $my_form = $this->container->get('form.factory')->create($this->container->get('my_type'));

    Si jamais tu souhaites utiliser ce même service avec une classe d'implémentation du formulaire différente il te suffit de redéfinir le paramètre my_type.class dans ton parameters.yml

    A+

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut
    Effectivement dans ce cas l'utilisation d'un service semble appropriée. Merci beaucoup pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ouvrir un formulaire sans ouvrir access
    Par Vincent623 dans le forum IHM
    Réponses: 25
    Dernier message: 28/12/2006, 09h34
  2. Réponses: 4
    Dernier message: 27/11/2005, 17h54
  3. Réponses: 3
    Dernier message: 18/10/2005, 21h14
  4. Réponses: 2
    Dernier message: 18/10/2005, 10h54
  5. Réponses: 2
    Dernier message: 28/09/2005, 17h08

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