Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Donc je met mon ExchangeArray() ainsi que les getters, et j'enlève mes setters ?
Hors ligne
flobrflo a écrit:
Orkin, tu a le droit d'utiliser les "_" dans tes variables.
Oui je sais bien . C'est juste que dans les bonnes pratiques du ZF2 c'est camelCase les noms de variable
. Donc autant prendre les bonnes habitudes dès le début. Après je l'accorde c'est un peu chiant avec Zend\Db pour les noms d'attribut dans les tables j'ai pas trop le soucis puisque j'utilise doctrine et il y a une annotation qui permet de choisir le nom de l'attribut donc à ce moment là je peux mettre un "_".
flobrflo a écrit:
romsVLM le exchangeArray te permet le "set" de l'objet complet. Mais tu ne peu pas les récupérer ensuite si tu ne met pas les getters.
Le exchangeArray sert effectivement à remplir l'objet donc il joue le rôle de setter dans le cas où tu lui passes le retour de ton formulaire sous forme d'un array. Sauf que dans le cas où tu utilises le bind et l'hydration il ne retourne plus un array mais l'objet que tu lui as bindé donc elle ne sert plus puisque c'est le formulaire qui se charge de remplir l'objet. Et dans son cas si il peut les récupérer sans getter puisque les attributs sont publiques. Donc là si son objet est vide c'est uniquement parce qu'il n'est pas hydraté .
romsVLM a écrit:
J'ai rajouté les setters et getters, mon tableau est bien rempli maintenant. Merci beaucoup.
C'est pas un tableau ... C'est un objet Commande. Faut vraiment faire attention à ça quand tu utilises les formulaires avec les hydrateurs et que tu lui bind un objet c'est ce même objet qu'il te retourne. On pourrait même aller plus loin :
[lang=php] $commande = new Commande(); $monForm->bind($commande); ... if ($monForm->isValid()) { $monForm->getData() === $commande // l'objet est passé par référence $commande = $monForm->getData(); // On fait ça pour la lecture c'est plus simple mais c'est au final inutile puisque //$monForm->getData() retourne le même objet que $commande pour le vérifier il suffit de faire un var_dump des deux et de //regarder l'id de l'objet ;) }
romsVLM a écrit:
Par contre si ça ne te dérange pas, peux tu me donner quelques explications ?
Pourquoi sans getters et setters, mon objet n'a pas été hydraté ? N'étais ce pas le rôle de ExchangeArray($data) ?
Là c'est plus vraiment lié au ZF2 c'est un problème à la POO, un attribut d'objet est toujours privé et non publique donc le seul moyen de pouvoir le modifier est de passer par des getters et des setters. On aura beau dire que le Java a plein de défaut mais au moins là dessus il impose d'être rigoureux. Et donc l'hydrateur pour remplir ton objet il fait :
[lang=php]$setter = 'set' . conversionCamelCase($nomInput); $object->$setter($value);
pour affecter les valeurs à ton objet. Sans setters bah il rempli rien. Les getters dans ton cas tu peux les virer vu que tes attributs sont publiques (c'est dégueulasse mais bon ...). Et le exchangeArray si tu t'en sers pas tu peux le virer il sert à rien et il n'est pas appelé par l'hydrateur.
Hors ligne
Merci, tout marche niquel , je suis passé en camelCase et j'ai tout mis en private.
J'en ai appris des choses avec ce post
Hors ligne