Donc, la réponse est plutôt tard, mais j'ai récemment rencontré ce problème et bien que je partagerais la raison et les solutions possibles. D'après mes recherches, il y a au moins 7 bogues dans le système de billetterie de Zend qui traitent de ce problème - bien que les descriptions varient énormément.
(SO m'a empêché de coller tous les liens, donc je vais lier un et vous donner les identifiants de billets pour les autres: ZF-9386, ZF-3567, ZF-9451, ZF-7836, ZF 9409, ZF-7679)
http://framework.zend.com/issues/browse/ZF-10007
celui qui décrit le mieux la question, et solutions possibles, est 10007 - cependant, ZF se sont inexplicablement choisi pas de fixer jusqu'à 2.0.
Le problème provient du fait que lorsque vous utilisez explicitement:
$ this-> form-> a-> b-> c-> d notation, d oubliera tous l'un de ses sous-formulaires ancêtres, à l'exception c'est "c" immédiat. Lorsque vous avez un grand formulaire avec un comportement personnalisé, ceci est très fastidieux car vous pouvez rendre le sous-formulaire entier "d" sans appeler ses descendants spécifiques, mais vous pouvez le vouloir à un certain endroit ou les décorateurs Zend ne peuvent pas pour le tirer sans un tas de travail ou pas du tout.
Je devrais penser que ce serait un problème commun dans le monde de sous-formulaire, puisque par définition vous travaillez avec des formes complexes et excepté le plus générique des formes presque aucune serait linéaire ou clairement séparée par dt/dd ou autre balisage propre.
J'ai trouvé trois façons de résoudre ce problème. Le premier est le patch fin contribué en 10007 - cela ne fonctionnera pas pour moi car il ne fonctionne qu'avec l'impression d'un sous-formulaire directement et non des éléments individuels - ce qui représente environ 50% de mon cas d'utilisation. Ne connaissant pas assez bien ZF, je n'ai pas poursuivi l'extension de cette fonctionnalité aux éléments. Le second est de renoncer à tout code HTML personnalisé autour des éléments et d'ajouter suffisamment de décorateurs pour satisfaire la mise en page. Bien que les miennes soient bien structurées avec TRs/TDs, etc., je ne pouvais pas justifier le temps ni la décision de 100% ZFaire nos formes les plus complexes - parce qu'un jour il pourrait être que ZF ne serait pas le meilleur choix.Le troisième est un compromis beaucoup plus coupé et sec, et c'est ce que j'ai choisi: je renoncerais à la convience de pouvoir faire écho au $ this-> form-> a-> b-> c-> d sous-formulaire , et à la place, écho individuellement de tous mes éléments dans leurs endroits appropriés (comme echo $ this-> form-> a-> b-> c-> d-> element1 et echo $ this-> form-> a-> b- > c-> d-> élément2). Cela permet de garder mon HTML hors des décorateurs qui a ses compromis, mais garde mes formes en ZF, ce qui est tout ce que je veux. Avec cette solution, vous pouvez maintenant appeler setElementsBelongsTo() sur le sous-formulaire d et utiliser la notation de tableau pour que la soumission se comporte correctement, comme ceci:
$ objSubFormD-> setElementsBelongTo ('[a] [b] [c] '). Veuillez noter que j'ai réduit ces exemples au-delà de l'aspect pratique pour que les (dés) avantages ne soient pas immédiatement évidents pour chacun, je n'ai donné que ce que je perçois comme étant des options et ce que j'ai choisi comme un Solution. Je pense aussi que ma solution me donne le meilleur chemin de mise à niveau vers ZF 2.0.