Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Je suis entrain de passer d'une version inconnue (0.4.x il me semble) vers la 0.9.0 beta. Je précise que l'appli fonctionne très bien avec cette version de ZF (l'inconnue).
J'ai quelques soucis de portabilité du code. Certains problèmes ont été résolus avec votre aide
Il m'en reste toutes fois un que je n'arrive pas à résoudre.
j'ai une structure MVC comme suit :
/appli/htdocs_appli : pour tout ce qui est accessible par le web (js, css, images et index.php)
/appli/php_commun/zend : pour ZF
/appli/php_appli/controleur : pour les controleurs
/appli/php_appli/modele : pour la partie modele dans lequel, j'ai un TrucModel.php (pour l'objet en lui même), un TrucPersist.php (pour la couche de persistance) et TrucTable.php (pour l'accés à la BDD elle même)
/appli/php_appli/vue : pour les vues
Cela reste assez classique il me semble.
Avant, tout ce qui était dans le index.php était accessible par tous les autres scripts. A savoir, si je faisais un Zend:loadClass("truc", "/rep/de/la/class"); cette class était accessible dans tous mes scripts.
Après avoir remplacé tous mes Zend::loadClass par des Zend_Loader::loadClass et autres joyeuseté, j'en arrive à me préoccuper de la BDD. Et c'est là que ça ne fonctionne plus comme avant
J'utilise le Zend_Db_Table pour accéder à mes tables.
J'ai une belle Fatal error: Uncaught exception 'Zend_Db_Table_Exception' with message 'No object of type Zend_Db_Adapter_Abstract has been specified' alors que j'ai bien fait un Zend_Db_Table::setDefaultAdapter($db) et que ça fonctionnait très bien avant.
Je pense que cela vient d'un problème de portée des variables, mais je ne m'explique pas pourquoi ça fonctionnait bien avec la version xxx et plus avec la version 0.9.0
Ce qui me fait dire que c'est un problème de portée, c'est que j'ai fait un Zend_Registry::set() d'un variable et que si je fais, dans mon script TrucTable.php, Zend_registry::get('ma_variable') et bien ça m'envois une exception Fatal error: Uncaught exception 'Zend_Exception' with message 'No entry is registered for key 'config''.
Voila, si vous avez des idées, elles sont les bienvenues
Hors ligne
Bonjour,
Je n'utilise pas le defaultAdapter, mais la fonction que tu utilises n'existe plus dans Zend_Db_Table en 0.9.
Dans la version 0.9, il semble qu'elle ait migré dans Zend_Db_Table_Abstract.
Essaye : Zend_Db_Table_Abstract::setDefaultAdapter($db);
La documentation sur le site de Zend n'est pas à jour à ce niveau.
Dis nous si ça fonctionne,
A+, Philippe
Hors ligne
J'ai essayé et j'ai la même erreur.
Ce que je ne comprend pas, c'est que les class chargées avec Zend_Loader::loadClass dans le index.php ne sont plus visibles dans les autres scripts.
Hors ligne
Ca c'est super bizarre. Chez moi, je n'ai aucun problème à ce niveau avec Zend_Loader.
Par contre pour ton erreur :
Uncaught exception 'Zend_Db_Table_Exception' with message 'No object of type Zend_Db_Adapter_Abstract has been specified'
J'ai fouillé dans le code, elle est envoyée par la classe Zend_Db_Table_Abstract quand son $_db interne n'est pas une instance de Zend_Db_Adapter_Abstract.
Or si tu as fait Zend_Db_Table_Abstract::setDefaultAdapter($db); dans ton index.php, il va automatiquement récupérer ce $db là.
Est-ce que tu as bien vérifié que ton $db était bien défini ?
Sinon là j'avoue, je suis un peu sec...
Hors ligne
Attention y à quelques bugs dans la version 0.9 (corrigés sur le SVN et corrigés dans la futur version 0.9.1) va jeter un coup d'oeil sur : http://framework.zend.com/issues/secure/Dashboard.jspa
Hors ligne
Je vais chercher un peu plus et je vous tiens au courant. Je pense que je vais mettre une nightly.
Hors ligne
Voila, j'ai trouvé d'où venait mon problème (tout n'est pas résolu mais j'avance)
Bêtement, j'ai vu que, pour les contrôleurs, il fallait utiliser la fonction init() plutôt que la fonction __construct(). J'ai donc changer tous les __construct en init dans mon projet ce qui fait que pour mes class autres que contrôleur, je les ai aussi changées
Maintenant, j'ai remis les __construct où il fallait et ça marchotte car le comportement des fonctions Zend_Db_Table::find() est légèrement différent de la version que j'utilisais.
Si vous avez des idées pour ça, je suis preneur !!
Merci
Hors ligne
Bon, en ce qui concerne les fonctions find() de Zend_Db_Table elles fournissent un Zend_Db_Table_Rowset tout le temps même si on ne met qu'un id dans le find() contrairement à ce qui est dit dans la doc (même l'anglaise).
Pour avoir la ligne courante, il suffit de faire comme ça :
$lignes = parent::find($id); $ligne = $lignes->current();
Pour une table :
contact {
ct_id INTEGER,
ct_nom VARCHAR(30)
}
on accède alors aux champs :
$ligne->ct_id $ligne->ct_nom
Hors ligne