Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour tout le monde,
Je vous explique mon probleme qui est tout simple :
Je n'arrive pas a passer un parametre a mon action au moment de l'appel de celle ci...
Voila mon code :
index.phtml :
<?php echo $this->action('comment', 'news', array('newsfk' =>$newspk)); ?>
mon controller, NewsController.php :
function commentAction(){ $form = new Form_Comment(); $this->view->form = $form; $iNews_pk = $this->_getParam('newsfk'); . . .
Voila, ca ne marche pas du tout et je ne trouve pas comment faire....
Please help !!
Merci d'avance !!
(si vous avez besoin de plus d'information hésitez pas à demander... )
Hors ligne
Bonjour,
C'est normal, le controller est appelé avant la vue (index.phtml) car son boulot c'est de passer des infos à la vue. La "communication" ne se fait donc que dans un sens : Controller -> Vue et pas Vue -> Controller.
Pourquoi veux tu envoyer des données de la vue au controller ?
Hors ligne
Ben en fait c'est un système de commentaire sur des news... (un peu a la facebook)
et je voudrais envoyer l'id (de la base) de la news à l'action qui insère le commentaire dans la base..
Je ne sais pas si je suis très clair...
Mais pourtant dans l'appel de la fonction action, on peut passer en paramètre une variable param qui est un array... Mais je n'arrive pas à la récupérer...
Hors ligne
Donc ça devrais ressembler à ça :
function commentAction() { $form = new Form_Comment(); // Tu regarde si le formulaire a été posté if($this->_request->isPost()) { $formData = $this->_request->getPost(); if($form->isValid($formData)) // On vérifie si les validateurs sont respectés { // Là tu fais l'insertion en base // ... $this->_redirect('/index/commentok'); // par exemple } $form->populate($formData); } $this->view->form = $form; }
Je ne sais pas si ça répond à tes attentes :s
Julien.
Dernière modification par EffigieCreations (16-07-2009 16:45:46)
Hors ligne
Ben la je ne récupère pas l'id de la news si? C'est ce que je fais évidemment mais après le code que j'ai posté dans mon premier poste, pour insérer tout dans la base.
Hors ligne
Je n'arrive pas trop à comprendre ce que tu veux faire :s Tu veux savoir comment insérer les données en base ou juste récupérer l'ID que tu vient d'insérer ?
Hors ligne
En fait je veux recuperer l'id de la news que je vais commenter pour pouvoir l'inserer en clé etrangere dans ma table de commentaires.
mon code de index.phtml donne ca :
<?php $i = 0; foreach ($this->oNews as $oNew) : ?> <div class="news"> <input type="hidden" value="<?php echo $oNew->newspk; ?>" id="newspk" name="newspk" /> </div> <div class="commentForm" id="commentForm_<?php echo $i;?>"> <?php $oComment = new Model_dbTable_Comment(); $oComments = $oComment->getComment($oNew->newspk); if($oComments != ""){ foreach($oComments as $oC){ echo "<div class='comments'>"; echo "Auteur :".$oC['auteur']; echo " Date :".$oC['date']; echo "<br/><br/> ".$oC['text']."<br/><br/>"; echo "</div>"; } } ?> <?php echo $this->action('comment', 'news',array('newspk' =>$oNew->newspk)); ); ?> </div> <br /> <?php $i ++; endforeach; ?>
Et donc je veux passer la valeur de l'id a mon action par l'appel de la fonction "$this->action(...)" pour pouvoir insérer le commentaire avec le texte et la clé étrangère.
J'espère avoir était un peu plus clair ^^
mais je te remercie de ces réponses rapides !!
Dernière modification par Kei (16-07-2009 17:08:27)
Hors ligne
Heu, je ne suis pas sure de comprendre non plus..
Tu es sur la lecture d'une news avec un formulaire en dessous pour ajouter un commentaire.
Dans l'action en cours (la lecture de la news) tu as déjà l'id en paramètre "http://tonsite/news/lecture/id/XX"
donc tu as juste à récuperer cette id avec :
$id = (int)$this->_request->getParam('id');
et à le re-balancer à ton formulaire soit dans un champ hidden soit dans l'url d'envoi de ton formulaire.
Non ?
Dernière modification par slaughter (16-07-2009 17:19:37)
Hors ligne
Ok je vois ton problème. Alors le mieux ça serais que tu crée une méthode dans ton model "News" qui te permette de générer le formulaire que tu dois afficher :
public function getMyCommentForm() { $form = new Form_Comment(); $element = new Zend_Form_Element_Hidden('newspk'); $element->setValue($this->newspk); $form->addElement($element); return $form; }
et dans "index.phtml" tu fais :
<?php foreach ($this->oNews as $key => $oNew) : ?> <div class="commentForm" id="commentForm_<?php echo $key;?>"> <?php $oComment = new Model_dbTable_Comment(); $oComments = $oComment->getComment($oNew->newspk); if($oComments != "") { foreach($oComments as $oC) { echo "<div class='comments'>"; echo "Auteur :".$oC['auteur']; echo " Date :".$oC['date']; echo "<br/><br/> ".$oC['text']."<br/><br/>"; echo "</div>"; } } ?> <?php echo $oNews->getMyCommentForm(); ?> </div> <br /> <?php endforeach; ?>
Qu'en penses tu ?
Julien.
Hors ligne
@slaughter : Apparement Kei liste plusieurs news sur la même page, il n'a donc pas 1 seul ID de news.
EDIT : enfin si j'a bien compris xD
Dernière modification par EffigieCreations (16-07-2009 17:44:06)
Hors ligne
Ça me semble être une bonne idée. Je vais essayer de bidouiller!!
Merci beaucoup en tout cas !!
Hors ligne
Hello,
Il te manque un paramètre à action :
echo $this->action('comment', 'news', null, array('newsfk' =>$newspk));
Null pour le module.
A+
Hors ligne
A ben en effet... il manquer simplement un parametre... Ca enerve...
Merci mikaelkael, et merci aussi julien pour avoir trouver une autre solution ^^!
Hors ligne