bonjour,
je travaille avec un formulaire imbriqué mais je veux faire une condition sur unset si je suis dans le module racine je cache certains champ mais si je suis dans module imbriqué je cache d'autre champ ??
merci![]()
bonjour,
je travaille avec un formulaire imbriqué mais je veux faire une condition sur unset si je suis dans le module racine je cache certains champ mais si je suis dans module imbriqué je cache d'autre champ ??
merci![]()
Je ne vois pas trop comment l'objet form peut savoir s'il est root ou enfant.
Je pense que la meilleur solution serait de créer deux objets dérivé de ton form, un pour être utilisé dans la racine et un pour les embed. Tu auras alors la structure objet suivanteLa méthode configure des objets RootMonformForm et EmbedMonformForm ressemblera alors à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BaseMonformForm -> MonformForm -|->RootMonformForm |->EmbedMonformForm
Ce qui permet accessoirement de faire plus de traitement que de simple unset.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public fonction configure() { parent::configure(); // IMPORTANT vu qu'elle est définie dans MonformForm unset('field1', 'field2', 'field3'); }
merci, voici une solution qui m'a bien sérvie : passer un paramettre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class KkForm extends BaseKkForm { public function configure() { if($this->getOption('from_parent')){ unset( $this["hh"], $this["nom"]); }else unset($this["hh"]); }}
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 class ClientForm extends BaseClientForm { public function configure(){ unset( $this["id"] ); if($this->getObject()->isNew()) { $this->embedForm('gg', new KkForm(null,array('from_parent'=>true))); } if(!$this->getObject()->isNew()) { $a = new KkForm(); foreach ($this->object['Kk'] as $index=>$Kk) { $this->embedForm('gg',new KkForm($Kk,array('from_parent'=>true))); } $a->embedForm('gg',$a); } } }
C'est aussi une solution.
Personnellement, d'un niveau utilisation objet, je préfère l'utilisation de l'héritage d'objet.
Ceci est plus clair, chaque objet fait ce pour quoi il est conçu. Pas de confusion possible.
La solution de paramètres passé est élégante, mais peut, à terme, porter à confusion (dans une future release d'ici un an, par un autre développeur).
La notion d'objet enfants est immédiatement visible, elle va permettre de générer un code plus sur, plus simple à maintenir.
Partager