Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-05-2009 15:14:32

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

[Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Bonjour,

Après de longues recherches infructueuses je me tourne vers vous pour je l'espère trouver réponse à ma demande.

Jusqu'à la mise à jour du ZF en 1.8, j'utilisais des classes de Rowset et Row personnelles ( My_Db_Table_Rowset_xxxxx, My_Db_Table_Row_xxxxx ) que je définissais dans mon modèle de base xxxxx.php dans mon répertoire "/models"

Avec la 1.8, j'ai voulu réorganiser mes répertoires et être plus "logique" en définissant mes modèles de Rowset et Row via la moduleloader et je m'y prend ainsi :

Code:

        $moduleLoader->addResourceType(
            'rowset', 
            'models/DbTable/Rowset/', 
            'Model_DbTable_Rowset_'
        );

        $moduleLoader->addResourceType(
            'row', 
            'models/DbTable/Row/', 
            'Model_DbTable_Row_'
        );

Puis je modifie dans mon modèle de base les classes à utiliser ainsi :

Code:

    protected $_name = 'users';
    protected $_rowsetClass = 'Model_DbTable_Rowset_Users';
    protected $_rowClass = 'Model_DbTable_Row_User';

Mais la recherche de modèles ne prend pas en compte le moduleloader, il cherche mes modèles dans "Model\DbTable\Row\" au lieu de "models\DbTable\Row\"
Je ne vois pas comment faire, c'est la seule chose qui m'empêche de terminer la migration.

Si vous avez une idée, merci.

Hors ligne

 

#2 08-05-2009 15:45:22

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Il semblerait que ce soit impossible actuellement, en effet je vois dans le code de "Zend_Db_Table_Abstract", que les devs ont laissé la méthode dépréciée "Zend_Loader::loadclass()".

Je vais devoir attendre, pour l'heure je vais faire ce que je n'aime pas du tout, modifier le fichier "maitre".

Hors ligne

 

#3 08-05-2009 16:14:36

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

eu je vais peut être dire une bêtise :

Code:

    protected $_name = 'users';
    protected $_rowsetClass = 'DbTable_Rowset_Users';
    protected $_rowClass = 'DbTable_Row_User';

A+JYT

Hors ligne

 

#4 08-05-2009 17:22:10

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Merci d'avoir essayé mais non, ça ne fonctionne pas. Comme l'appel de mon modèle "table" est Model_DbTable_xxxxx les autres sont copiés sur celui-ci.

De toute façon en modifiant le code Zend_Loader::loadclass(xxxx) par ce qu'ils conseillent eux-même, à savoir Zend_Loader_Autoloader::autoload(xxxx), cela fonctionne parfaitement.

Hors ligne

 

#5 09-05-2009 16:20:27

wiwidumi
Membre
Date d'inscription: 14-04-2009
Messages: 19

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Salut tu pourrais m'expliquer un peu ta solution ? J'ai le même problème, j'ai des dossiers rowset et row à charger dans mon autoload.

Pour la méthode: public function addResourceType($type, $path, $prefix = null), elle existe bien, il doit avoir un moyen de spécifier un chemin pour un namespace, mais cela n'a aussi aucun effet quand je l'utilise.

Il y a vraiment peu d'explications à ce sujet je trouve malheureusement ..

Hors ligne

 

#6 11-05-2009 09:14:11

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Le problème rencontré est que les devs ont laissé dans leur code un appel qu'ils déprécient eux même.

A savoir "Zend_Loader::loadclass(xxxx)"
Qu'il faut remplacer par "Zend_Loader_Autoloader::autoload(xxxx)"

Sinon les namespaces ne sont pas pris en compte. J'ai donc modifié ces appels dans le fichier Zend/Db/Table/Abstract.php

Modification en "dur", que je déteste faire.

Hors ligne

 

#7 11-05-2009 21:58:10

wiwidumi
Membre
Date d'inscription: 14-04-2009
Messages: 19

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Ah bien je te remercie, je vais attendre qu'ils le fassent eux même. smile

Hors ligne

 

#8 11-05-2009 22:50:38

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Salut yvann,

Ce n'est pas parce que les développeurs déprécient 2 fonctions (Zend_Loader::autoload(class) et Zend_Loader::registerAutoload()) qu'il faut en conclure que la classe est dépréciée. Zend_Loader::loadClass(class) n'en fait pas partie.

Si tu as fait un tour dans le QuickStart (ce que je ne doute pas), tu aurais vu que tu avais une partie de la SOLUTION.

Code:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoload()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(
            array(
                'namespace' => '',
                'basePath'  => dirname(__FILE__),
            )
        );
        $moduleLoader->addResourceType(
            'rowset', 
            'models/DbTable/Rowset/', 
            'Model_DbTable_Rowset_'
        );
        $moduleLoader->addResourceType(
            'row', 
            'models/DbTable/Row/', 
            'Model_DbTable_Row_'
        );
        return $moduleLoader;
    }
}

Rajoutes ceci dans ton bootstrap et ça devrait marcher.

++

Hors ligne

 

#9 11-05-2009 23:14:49

wiwidumi
Membre
Date d'inscription: 14-04-2009
Messages: 19

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Bonjour, j'ai fait exactement ceci, et cela ne fonctionne malheureusement pas. sad

Hors ligne

 

#10 12-05-2009 22:47:43

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Euh, quelle différence avec mon code ?

Code:

        $moduleLoader->addResourceType(
            'rowset', 
            'models/DbTable/Rowset/', 
            'Model_DbTable_Rowset_'
        );

        $moduleLoader->addResourceType(
            'row', 
            'models/DbTable/Row/', 
            'Model_DbTable_Row_'
        );

Ca ne fonctionne pas parce que "loadclass" n'utilise pas ces "types" justement.

Hors ligne

 

#11 07-06-2009 12:30:43

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [Zend_Db_Table][1.8] - _rowsetClass et _rowclass avec le moduleloader

Depuis la 1.8.2, tout fonctionne parfaitement smile les développeurs ont bien modifié les lignes incriminées.

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