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 :

Formulaire et EmbedForm a plusieurs niveaux et ajax.


Sujet :

Symfony PHP

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut Formulaire et EmbedForm a plusieurs niveaux et ajax.
    Bonjour,

    Alors j'espère que quelqu'un aura une réponse a m'apporter sur un formulaire assez complexe que je dois mettre en oeuvre...

    Bon pour résumer et comprendre ma situation :

    Je dois mettre en oeuvre un formulaire d'inscription assez complexe... (désolé pas possible de le changer, on me le demande ainsi... )

    Donc quand j'entre une compagnie, la personne peux rajouter des bureaux, et dans chaque bureau, la personne peux rajouter divers informations (url, contact...etc...).

    Niveau formulaire j'ai cela :
    compagnie -> [array embed] bureaux -> [array embed] urls|contacts|...

    A la validation, j'ai bien mes bureaux (même ceux rajouté a la volé avec mon overload de la méthode bind et un add des forms a la volé en fonction des values). Parcontre pour chaque bureau, je n'ai plus mes champs rajouté a la volé....

    Voici les différents portions de codes:

    !! CompagnieForm.class.php
    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
     
    public function addBureau($num) {
    	$b = new CompagnieBureau();
    	$b->setCompagnie($this->getObject());
    	$bf = new CompagnieBureauForm($b);
    	$this->embeddedForms['bureaux']->embedForm($num, $bf);
    	$this->embedForm('bureaux', $this->embeddedForms['bureaux']);
    }
     
    public function bind(array $values = null, array $files = null) {
    	foreach ($values['bureaux'] as $k=>$b) {
    		if (!isset($this['bureaux'][$k])) {
    			$this->addBureau($k);
    		}
    		// ici je force le binding dans chaque sous formulaire pour générer les sous champs a la volé
    		$this->embeddedForms['bureaux']->embeddedForms[$k]->bind($values['bureaux'][$k]);
    	}
    	return parent::bind($values, $files);
    }
    // Dans CompagnieBureauxForm.class.php
    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
     
     
    	// Methode permettant de rajouter un form (embed) de manière générique...
    	public function addForm($modelName, $n) {
    		$classname = 'CompagnieBureau'.ucfirst($modelName);
    		$formname = $classname.'Form';
    		$o = new $classname();
    		$o->setCompagnieBureau($this->getObject());
    		$m = 'get'.ucfirst($modelName).'s';
    		$objs = $this->getObject()->$m();
    		$objs->add($o);
    		$m = 'set'.ucfirst($modelName).'s';
    		$this->getObject()->$m($objs);
    		$of = new $formname($o);
    		$this->embeddedForms[$modelName.'s']->embedForm($n, $of);
    		$this->embedForm($modelName.'s', $this->embeddedForms[$modelName.'s']);
    	}
     
    	// Methode permettant de rajouter un form a la volé (ça passe pas...)
    	protected function bindForm($modelName, array $values = null, array $files = null) {
    		foreach ($values[$modelName.'s'] as $k=>$o) {
    			if (!isset($this[$modelName.'s'][$k])){
    				$this->addForm($modelName, $k);
    			}
    		}
    	}
     
    	public function bind(array $values = null, array $files = null) {
    		$this->bindForm('url', $values, $files);
    		$this->bindForm('contact', $values, $files);
    		$this->bindForm('telephone', $values, $files);
    		$this->bindForm('fondateur', $values, $files);
    		$this->bindForm('dirigeant', $values, $files);
    		foreach ($this->embeddedForms as $name=>$form) {
    			if (isset($values[$name]))
    				$this->embeddedForms[$name]->bind($values[$name]);
    		}
    		$output = parent::bind($values, $files);
    		return $output;
    	}
    Donc mes binds sont bien passé dans les sous formulaires et les sous-sous formulaires... Parcontre lors du render je n'ai qu'un champs... Les autres (meme si le bind et que le rajout a été effectué) ne sont pas du tout là!. De plus ça me génére une erreur, mais aucun output (pourtant en environnement de dev avec tout qui est actif...).

    PS: le binding générique et la génération a la volé des forms marchent aux embedForm de 1er niveau, parcontre ça coince a plus bas...

    Bref, ça fais 3 jours que je suis dessus, mais impossible de savoir... Quelqu'un aurait une idée?
    Images attachées Images attachées  

Discussions similaires

  1. Formulaire regroupement plusieurs niveaux
    Par johan_m dans le forum IHM
    Réponses: 6
    Dernier message: 06/03/2012, 12h14
  2. Nav ajax: plusieurs niveaux de chargement d'html
    Par franckichmish dans le forum jQuery
    Réponses: 3
    Dernier message: 12/02/2012, 23h45
  3. Plusieurs niveaux de colonnes dans TDBGrid
    Par TicTacToe dans le forum Composants VCL
    Réponses: 4
    Dernier message: 31/01/2006, 10h44
  4. Création de plusieurs niveaux de sous formulaires
    Par Farbin dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2005, 20h15
  5. formulaire qui doit appeler plusieurs pages
    Par rohel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/01/2005, 08h59

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