Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-12-2008 15:37:01

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

[Résolu][ZF 1.6.0][ZendPaginator]Problème d'accès aux données

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

 

#2 16-12-2008 15:43:28

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu][ZF 1.6.0][ZendPaginator]Problème d'accès aux données

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.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 16-12-2008 15:54:34

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][ZF 1.6.0][ZendPaginator]Problème d'accès aux données

Le modèle est le suivant :

Code:

<?php

class Productions extends Zend_Db_Table
{
    protected $_name = 'productions';
    protected $_primary = 'prod_id';
}

?>

Quant au controleur, le voici :

Code:

<?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 :

Code:

$select = $TProductions->fetchAll();

Ca confirme votre diagnostic, bien joué docteur ... mais j'avoue qu'une petite explication serait la bienvenue ;-)

Hors ligne

 

#4 16-12-2008 16:16:53

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu][ZF 1.6.0][ZendPaginator]Problème d'accès aux données

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

Code:

$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.

Code:

$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):

Code:

$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)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#5 16-12-2008 21:24:25

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][ZF 1.6.0][ZendPaginator]Problème d'accès aux données

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 :

Code:

<?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

 

#6 16-12-2008 21:40:44

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu][ZF 1.6.0][ZendPaginator]Problème d'accès aux données

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.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages