Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
$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 :
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
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
eu je vais peut être dire une bêtise :
protected $_name = 'users'; protected $_rowsetClass = 'DbTable_Rowset_Users'; protected $_rowClass = 'DbTable_Row_User';
A+JYT
Hors ligne
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
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
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
Ah bien je te remercie, je vais attendre qu'ils le fassent eux même.
Hors ligne
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.
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
Bonjour, j'ai fait exactement ceci, et cela ne fonctionne malheureusement pas.
Hors ligne
Euh, quelle différence avec mon 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
Depuis la 1.8.2, tout fonctionne parfaitement les développeurs ont bien modifié les lignes incriminées.
Hors ligne
Pages: 1