Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je tente de mettre en place une visualisation par page
sur la vue d'une simple table qui jusque là me retourne
un nombre trop important d'enregistrements sur une seule page.
Je me suis donc inspiré du tuto de Mr Julien Pauli et je pense pas
être si loin que ça de la réussite mais ... ça coince !
J'ai bien l'affichage du paginateur en bas de page
et le nombre de pages proposé est en concordance avec les données
présentes dans la table.
En revanche, j'obtiens un vilain message "Trying to get property of non-object"
à chacun de mes appels à un champ de ma base dans la vue.
Voyez-vous une piste de recherche ?
D'avance merci.
Dernière modification par deviltaz (17-12-2008 07:57:07)
Hors ligne
Salut,
C'est le tableau (normalement un Zend_Db_Table_Rowset) que tu recupères dans ta vue qui ne doit pas être généré correctement.
Peux-tu nous coller la partie de ton code qui exécute la requête et retourne ton rowset ?
A+ benjamin.
Hors ligne
Le modèle est le suivant :
<?php class Productions extends Zend_Db_Table { protected $_name = 'productions'; protected $_primary = 'prod_id'; } ?>
Quant au controleur, le voici :
<?php class HistoController extends Zend_Controller_Action { public function indexAction() { $TProductions = new Productions(); $select = $TProductions->select(); $page = Zend_Paginator::factory($select); $page->setPageRange(5); $page->setCurrentPageNumber($this->_getParam('page', 1)); $page->setItemCountPerPage($this->_getParam('par', 20)); $this->view->prods = $page; } } ?>
PS : Après quelques tests, j'arrive à un résultat en remplaçant la définition du select par ceci :
$select = $TProductions->fetchAll();
Ca confirme votre diagnostic, bien joué docteur ... mais j'avoue qu'une petite explication serait la bienvenue ;-)
Hors ligne
select() ne suffit pas, il faut toujours finir par un fetch*** (fetchRow(), fetchAll() etc.), c'est ce qui déclenche la requête et récupère les résultats dans un Zend_Db_Table_Row*.
select() seul est équivalent à "SELECT * FROM table" sans l'exécution de la requête. (on peut le voir en faisant un $select->__toString())
L'objet
$select = $maTable->select();
est du type Zend_Db_Table_Select qui est une extension du Zend_Db_Select mais avec certaines contraintes liées à la table. Il s'utilise donc de la même manière.
En général le select() s'utilise donc avec d'autres clauses :
Ex.
$maTable = new maTable(); $select = $maTable->select() ->where('champ = ?', $valeur) ->order('date DESC'); $rows = $maTable->fetchAll($select);
Le code suivant fonctionne donc aussi (mais moins facile à lire):
$rows = $maTable->fetchAll($maTable->select() ->where('champ = ?', $valeur) ->order('date DESC') );
La doc explique bien ceci :
http://framework.zend.com/manual/fr/zen … .fetch-all
A+ benjamin.
Dernière modification par Delprog (16-12-2008 16:18:56)
Hors ligne
Merci pour ces précisions sur le fonctionnement de select,
c'est nettement plus clair maintenant.
Ce qui m'a induit en erreur, c'est justement l'exemple du tutoriel sur developpez.com, voir le code ci-dessous :
<?php class MembresController extends Zend_Controller_Action { public function listeAction() { $TMembres = new TMembres(); $select = $TMembres->select(); $page = Zend_Paginator::factory($select); $page->setPageRange(2); $page->setCurrentPageNumber($this->_getParam('page', 1)); $page->setItemCountPerPage($this->_getParam('par', 1)); $this->view->listeMembres = $page; } }
Dans cet exemple, Julien Pauli se contente d'un select ???
Cela peut fonctionner ou bien s'agit-il d'un oubli ?
A+
Hors ligne
Non, ce n'est pas une erreur.
Dans le cas du Paginator, quand tu utilises l'adaptateur DbSelect, tu dois passer le select en paramètre et c'est lui qui se charge d'exécuter la requête avec les "limit" qui vont bien. C'est là tout l'intérêt du paginator, tu indiques simplement les données que tu veux retourner, les paramètres nécessaires à la pagination et il se charge du reste.
Il ne faut donc pas faire un fetchAll() derrière la construction du paginator, sinon tu perds tout l'intérêt.
A+ benjamin.
Hors ligne
Pages: 1