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 :

Récupérer un object DANS un (sous ) formulaire


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Récupérer un object DANS un (sous ) formulaire
    Une question de débutant :
    Je crée régulièrement des formulaires "custom" depuis, un controlleur, j'y insere des formulaires simple ou des "Fieldsets" à partir du builder avec la méthod add.
    je récupère ensuite mon abjet mappé dans le controlleur avec $form->getData().

    Je n'arrive cependant pas à "atteindre" l'objet principal de mon formulaire quand je suis DANS le formulaires.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Création dans le contrôleur 
    $form = $this->createForm(new RessourceForm(), $ressource,array());
    Voici le code (simmplifié ) du formulaire

    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
     
    class RessourceForm extends AbstractType
    {
     
        public function __construct(Router $router, $entityId, $helps)
        {
    			//...
        }
     
    	public function buildForm(FormBuilder $builder, array $options)
        {
            parent::buildForm($builder, $options);
     
    		//comment acceder ici à l'instance ( et ses propriétés ) de l'objet passé lors de la création du formulaire ( attendu class Ressource ) 
    		// $this->detData();  -> erreur method non existante 
    	    //ressource =  $builder->getData();  -> apparemment ok
     
    		$builder->add('Description', new RessourceFormDescriptionFieldset());
    		 //...
     
        }
     
        public function getDefaultOptions(array $options)
        {
            return array(
                'data_class' => 'CS\PomModelBundle\Entity\Scenario\Ressource',
                'label' => 'Ressource'
            );
        }
    }
    et celui du "Fieldset"

    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
    class RessourceFormInformationFieldset extends FormType
    {
    	// ...
        public function __construct(Router $router, $entityId, $helps)
        {
    	// ...
        }
     
    	public function buildForm(FormBuilder $builder, array $options)
        {
            parent::buildForm($builder, $options);
     
    		//comment acceder ici à l'instance ( et ses propriétés ) de l'objet passé lors de la créattion du formulaire ( attendu class Ressource ) 
    		// object qui possede donc une propriété cdressource
     
    	   $builder->add('cdressource', 'text', array(
            	'required' => true, 
            	'label' => 'Code',
            ));
     
            //...
        }
     
        public function getDefaultOptions(array $options)
        {
            return array_merge(parent::getDefaultOptions($options),
                array('data_class' => 'CS\PomModelBundle\Entity\Scenario\Ressource'),
                $options            
                );  
        }
     
    }
    Toute remarque sur mon incompréhension du fontionnement des formulaires,
    ou toute idée autre est bienvenue.

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut
    J'avais croisé https://github.com/symfony/symfony/pull/3249, ça correspond à ce que tu veux?

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Points : 234
    Points
    234
    Par défaut
    Test un $options['data'] dans la méthode buildForm.

    Tu n'as pas besoin d'appeler la méthode parente non plus.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    $options['data'] => null;
    le https://github.com/symfony/symfony/pull/3249 ne semble pas correspondre non plus, à moins que je ne le comprenne pas ...

    merci.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,
    Normalement on utilise les form listener pour ce cas
    http://symfony.com/doc/2.0/cookbook/...eneration.html

    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
     
    class RessourceFormInformationFieldset extends FormType
    {
    public function buildForm($builder,$options){
     
    $factory=$builder->getFactory();
    $builder->addEventListener(\Symfony\Component\Form\Event\DataEventFormEvents::SET_DATA, function(Symfony\Component\Form\FormEvents$event)use($factory){
            	$data=$event->getData();
            	if(!$data){
            		return;//si pas de données
            	}
            	$field=$event->getForm();
    //on peut utiliser la variable $factory pour créer un nouveau champs et l'ajouter au formulaire
     });
    }
    }
    un lien qui peut également t'intéresser:
    http://odolbeau.fr/utiliser-les-form...-symfony2.html

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci,
    Dans le besoin , la présence, la nature et , l'organisation ( spatiale ) des différents champs dépend des propriétés de 'data';

    Je comprend donc que cela force à déporter l'intégralité des "buider->add" dans l'event listener pour organiser tous les champs ?

    Merci encore.

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/08/2013, 10h02
  2. Réponses: 1
    Dernier message: 04/07/2012, 08h28
  3. Réponses: 4
    Dernier message: 17/03/2011, 12h04
  4. Réponses: 9
    Dernier message: 05/08/2008, 09h12
  5. Réponses: 9
    Dernier message: 14/05/2007, 16h57

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