Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir,
Décidément j'ai pleins de questions avec ce Zend. Heureusement qu'il existe cette communauté...
Ma question est la suivante.
Dans un projet en MVC, on a vu qu'il existait des classes qui permettait "d'assister" le rendu html, zend_form par exemple : on créer une classe modèle qui hérite de zend form, on le construit dans le controlleur et on le recupère dans la vue.
Ma question est maintenant : si je souhaite créer un objet qui hérite de rien. Par exemple je souhaite faire un calendrier annuel (pour pouvoir faire ensuite un tas de trucs). Je n'ai pas vu de classe qui permettait de faire ce genre de chose, et puis même si c'était le cas, je souhaiterais le faire moi même au moins pour m'exercer.
Comment je dois procéder alors ? Je vais créer un modèle "MonCalendrier" dans la couche métier, mais comment je peux affecter du code html à mon objet pourqu'il soit ensuite interprété par la vue ?
A moins que la méthode mvc indique qu'il faut creer un objet "brute" donc sans code html, et c'est ensuite la vue qui va gérer ? (if je change de mois, alors je fait une nouvelle balise, etc....)
Par ailleurs je suis ouvert a toute ressource expliquant le mécanisme de fabrication de ses propres objets pour qu'ils soient ensuite affichés tels qu'on le soit.
Merci bien pour ces réponses.
Dernière modification par Mr.MoOx (19-03-2009 12:07:48)
Hors ligne
dans la vue
c'est le propre même de la vue que ge générer du code pour l'affichage
A+JYT
Hors ligne
Oui c'est ce que je pensais,
pour aller plus loin, ma question est :
lorsqu'un fait un echo $this->form; dans la vue, qui est-ce qui a généré le code html ? puisque visiblement, il ne semble pas que ce soit la vue (on ne voit pas les balises propres au formulaire dans le fichier .phtml).
Merci en tout cas pour ces réponses qui apportent énormement dans mon apprentissage.
Hors ligne
Je pense avoir trouvé ma réponse, il s'agit des helpers qui vont se charger de "générer" l'affichage html du modèle, non ?
Hors ligne
Je vois, je vais donc essayer de créer le mien alors.
Mais afin d'éviter toute confusion : s'agit-il d'un viewHelper ou d'un actionHelper.
Je pense qu'il s'agit d'un viewHelper, et que donc le fichier php doit se retrouver dans le dossier
MA RACINE/application/views/helpers/Calendrier.php
et doit contenir une classe Zend_View_Helper_Calendrier
qui contiendra la méthode calendrier
et qui fera un return {mon code html}
Si c'est le cas, tout devient plus clair alors !
Hors ligne
et ben non, ou alors il y a des choses a configurer :
Object of class Calendrier could not be converted to string
Hors ligne
En effet si dans ma vue je fais $this->calendrier(), cela fonctionne,
mais pourtant, dans le cas d'un formulaire, je fait dans le controlleur :
$monForm=new Formulaire(); $this->view->form=$monForm;
et dans ma vue :
echo $this->form;
et ca marche....
je cherche la subtilité
Dernière modification par gostbuster (19-03-2009 10:58:20)
Hors ligne
J'ai bien regardé la classe Zend_Form, et elle hérite de Zend_Form_Element_Xhtml,
J'ai donc fait hérité
/models/Calendrier.php de Zend_Form_Element_Xhtml
et j'ai remis : $this->calendrier dans mon fichier de vue(.phtml),
je n'ai pas d'erreur (c'est déjà ça), mais par contre je ne passe pas par ma méthode calendrier() du helper.
J'ai bien lu la doc, mais ça ne parle pas de la transformation modele->vue avec des helpers...(ou alors j'ai mal lu).
Merci
Hors ligne
Zend_Form_Element_Xhtml c'est très spécifique aux formulaires... essaie Zend_View_Helper_Abstract ou qqch comme ça...
Hors ligne
Merci de t'impliquer dans ton problème.
En fait, ma classe dans :
monsite/application/view/helpers hérite de Zend_View_Helper_Abstract
et ma classe : Calendrier dans /models hérite...de rien du tout pour l'instant, mais peut etre que c'est là que ca coince....
Hors ligne
Déjà si tu veux que la vue utilise un helper, c'est ainsi $this->calendrier()
Le Zend_Form marche comme ca $this->form car ça utilise la méthode magique __toString() qui est appellé sur un objet dès que tu fais une echo de celui ci. Et la méthode toString de zend_form utilise la méthode render, qui elle fait appelle aux helpers.
Relis bien la doc :p
Hors ligne
Ton helper n'est qu'une "fonction" tu dois donc lui passé en paramètre ton calendrier
Du coup tu devrais avoir quelque chose du genre "$this->calendrier($this->calendrier)"
Je fais exprès de mettre les mêmes noms pour que tu trouves seul où est la différence!
Hors ligne
Ok, je comprend mieux maintenant. Seulement est-ce que $this->calendrier() tient compte de l'instance de calendrier (dans le modèle) ? Théoriquement, je pense que oui (sinon ca aurait pas d'intérêt je pense...)
a moi maintenant de trouver un moyen de récupérer les infos dans calendrier() (les infos du modèle calendrier).
Merci a toi aussi (j'ai remercié keilnoth mais pas toi )
je cherche....
Hors ligne
Je comprends,
Pour te montrer que j'ai compris :
$this->{ma fonction helper qui va retourner le code html } ( mon objet calendrier que j'ai instancié dans le controlleur )
En fait les deux sont disctincts.
Merciiiiiii
(nos messages se sont croisés)
Hors ligne
Dernier coup de pouce...
$this->monHelperAfficheurDeCalendrier($this->monObjectCalendrierQueJAiPasseALaVue);
Techniquement parlant ton helper n'est pas dépendant de ton object métier si ce n'est dans la signature
class Zend_View_Helper_Calendrier { public function calendrier(Calendrier $calendar) { //... return $xhtml; } }
EDIT: bah voilà
Hors ligne
Oui, tu devais écrire ton message pendant que j'écrivais le mien. En effet, c'est ce que j'ai tout à fait compris.
Merci beaucoup pour ces informations qui m'apportent beaucoup !
;D
Hors ligne
Désolé c'est encore moi,
Je m'excuse mais j'ai une question qui me tracasse : on a pas le droit de manipuler des objets dans les helpers ?
exemple :
function calendrier(Calendrier $calendrier) { $cal=$calendrier->getTableau(); $xhtml=''; foreach($cal as $mois) { $xhtml.="<ul>"; foreach($mois as $jr) { $xhtml.= "<li>".$jr->getDay()."</li>"; } $xhtml.="</ul>"; } return $xhtml; }
Ca me fait un beau caca (1 janvier 1970 lol)
Je fais des recherches de mon coté, mais ca semble louche cette histoire car je pensais qu'on pouvait manipuler les objets à notre guise.
Pour info, calendrier contient un tableau qui contient plein de Zend_Date (a chaque fois j'ai fait un array_push( avec en paramètre un new Zend_Date(mes parametres))
...merci...
Hors ligne
Mince, je vois que personne ne répond, ca veut peut etre dire que personne ne sait lol.
Théoriquement je pense que oui, on peut utiliser les objets, non ?
Hors ligne
Pages: 1