Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-02-2009 20:22:24

Davjack
Membre
Date d'inscription: 06-02-2009
Messages: 32

[Résolu] Problème avec setTable (Fatal error)

Bonjour,

J'ai une classe qui hérite de Zend_Db_Table_Row_Abstract et lorsque je j'essaye de l'associer à une table avec le code suivante :

Code:

$this->setTable(new ClasseQuiHeriteDeZend_Db_Table_Abstract());

J'ai l'erreur suivante :

Fatal error: Class name must be a valid object or a string in /opt/lampp/htdocs/DavjackCMS/site/library/Zend/Db/Table/Row/Abstract.php on line 324

La ligne sus-mentionnée est la suivante (ligne 2 : if...) :

Code:

        $tableClass = get_class($table);
        if (! $table instanceof $this->_tableClass) {
            require_once 'Zend/Db/Table/Row/Exception.php';
            throw new Zend_Db_Table_Row_Exception("The specified Table is of class $tableClass, expecting class to be instance of $this->_tableClass");
        }

Je cherche depuis un moment sans succès sad
Une idée?

Dernière modification par Davjack (19-02-2009 16:52:36)

Hors ligne

 

#2 16-02-2009 22:19:15

Davjack
Membre
Date d'inscription: 06-02-2009
Messages: 32

Re: [Résolu] Problème avec setTable (Fatal error)

Je vais peut-être vous donner plus de détails (comme je débute avec Z-F) sur ma méthode de développement (qui n'est peut-être pas adaptée à Z-F).

Je développe en MVC avec des modules. Actuellement j'en suis au module de base (default).
Les modules sont organisés de la manière suivante (répertoires et fichiers non exhaustifs) :

module/
    config/
    controllers/
    models/
        Site.php
        Site/
            CSite.php
            TSite.php
    views/

Le fichier CSite.php contient toute la logique métier de la classe Site. Le fichier TSite.php contient les liaisons vers la table sites de la base de donnée (MySql).
Site.php est une classe qui devrait me permet de m'abstraire totalement du fait que j'ai deux classes (CSite et TSite). Le but est de n'utiliser que la classe Site dans les contrôleurs pour manipuler des enregistrement déjà existants et en créer de nouveaux.

Dans mon bootstrap, j'ai ajouter le chemin vers le répertoire des models/ pour pouvoir charger automatiquement les classes de ce répertoire.

CSite.php (le contenu des fichiers est incomplet, mais c'est pour l'exemple wink )

Code:

<?php
class CSite extends Zend_Db_Table_Row_Abstract
{
    /**
     * ACCESSEURS
     */
    public function getId()
    {
        return $this->id;
    }


    public function getName()
    {
        return $this->name;
    }

    public function setName($name)
    {
        $this->name = $name;
    }


    public function getBaseUrl()
    {
        return $this->base_url;
    }

    public function setBaseUrl($base_url)
    {
        $this->base_url = $base_url;
    }

    public function getActived()
    {
        return $this->actived;
    }

    /**
     * METHODES
     */

    /** Met le site en maintenance */
    public function setActived()
    {
        $this->actived = TRUE;
    }

    /** Active le site */
    public function setUnactived()
    {
        $this->actived = FALSE;
    }
}

TSite.php

Code:

<?php
class TSite extends Zend_Db_Table_Abstract
{
    protected $_name = 'sites';
    protected $_primary = 'id';
    protected $_rowClass = 'CSite';
    
    /**
     * METHODES STATICS
     */

    /**
     * Cherche un site selon un identifiant
     *
     * @return Site
     */
    public static function findById($id)
    {
        $site = new TSite();
        return $site->find($id)->current();
    }

     /**
     * ETC...
     */
}

Site.php

Code:

<?php
require_once 'Site/TSite.php';
require_once 'Site/CSite.php';

class Site extends CSite
{
    public function  init() {
        $this->setTable(new TSite());
    }

    public static function findById($id)
    {
        return TSite::findById($id);
    }
}

La ligne qui provoque ma "Fatal error" est $this->setTable(new TSite());

Voilà, j'espère que j'ai été compréhensible. big_smile
Si ce n'est pas le cas, redites-moi wink

Merci d'avance pour votre aide

Hors ligne

 

#3 17-02-2009 10:13:27

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: [Résolu] Problème avec setTable (Fatal error)

Si tu instancie ta table dans une variable avant  ?

Code:

$tSite = new TSite();
$this->setTable($tSite);

Mais bon ça me semble "bizarre" comme utilisation.....


Société : Direct Info Service

Hors ligne

 

#4 17-02-2009 10:52:28

Davjack
Membre
Date d'inscription: 06-02-2009
Messages: 32

Re: [Résolu] Problème avec setTable (Fatal error)

J'avais déjà essayé mais j'ai la même erreur avec la table préalablement instanciée. sad

Hors ligne

 

#5 18-02-2009 00:14:15

Davjack
Membre
Date d'inscription: 06-02-2009
Messages: 32

Re: [Résolu] Problème avec setTable (Fatal error)

Après avoir approfondi mes recherches, j'ai remarqué que j'ai mal compris la fonction setTable(). Cette fonction permet de reconnecter un tuple (row) déjà existant à une table de base de données mais pas à définir un la table d'un nouveau tuple.

Pour ceux qui choisiraient que ça intéresse, j'ai finalement opté pour une solution d'implémentation légèrement différente au niveau de la classe Site (méthode static create() ).

La voici :

Code:

<?php
require_once 'Site/TSite.php';
require_once 'Site/CSite.php';

class Site extends CSite
{
    public function  __construct() {
    }

    public static function create()
    {
        $tsite = new TSite();
        return $tsite->createRow();
    }

    public static function findById($id)
    {
        return TSite::findById($id);
    }

    /**
     * ETC...
     */
}

De cette manière, je manipule uniquement la classe Site, donc des objets Site, depuis les contrôleurs --> pas de notion de table ou row.
De plus (et c'est le but principal de cet implémentation), ma classe métier est très facile à adapter à un autre environnement de développement (ou framework). Il suffit de supprimer extends Zend_Db_Table_Row_Abstract.

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