Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1 2
Bonjour à tous,
je viens enfin de me plonger dans le zend ... alors si les débutants vous rebutent, passez au post suivant:D
J'avais acheté le livre de Christophe Haro mais nouvelle version oblige, impossible de s'y référer ...
J'ai donc commencé hier avec ce tuto :
http://s-jdm.developpez.com/tutoriels/p … work-1-10/
Tout se passe bien , installation, parametrage mais arrivé au chapitre XI. Lister les albums
alors que j'ai scrupuleusement respecté les étapes, je n'arrive pas à lister les albums :
An error occurred Application error Exception information: Message: No adapter found for Application_Model_DbTable_Albums Stack trace: #0 C:\wamp\www\tutoriel-zf\library\Zend\Db\Table\Abstract.php(739): Zend_Db_Table_Abstract->_setupDatabaseAdapter() #1 C:\wamp\www\tutoriel-zf\library\Zend\Db\Table\Abstract.php(268): Zend_Db_Table_Abstract->_setup() #2 C:\wamp\www\tutoriel-zf\application\controllers\IndexController.php(13): Zend_Db_Table_Abstract->__construct() #3 C:\wamp\www\tutoriel-zf\library\Zend\Controller\Action.php(513): IndexController->indexAction() #4 C:\wamp\www\tutoriel-zf\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction') #5 C:\wamp\www\tutoriel-zf\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #6 C:\wamp\www\tutoriel-zf\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch() #7 C:\wamp\www\tutoriel-zf\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #8 C:\wamp\www\tutoriel-zf\public\index.php(26): Zend_Application->run() #9 {main} Request Parameters: array ( 'controller' => 'index', 'action' => 'index', 'module' => 'default', )
J'ai beau regarder mes fichiers modifiés grace au tuto, je ne vois pas d'erreur...
Quelqu'un peut il m'aider?
Hors ligne
Tu as bien défini toutes les informations relatives à la BD dans ton fichier de config ?
Hors ligne
Et bien malheureusement oui, comme on est en local je mets des mots de passe particulièrement... simples :
ressources.db.adapter = PDO_MYSQL ressources.db.params.host = localhost ressources.db.params.username = utilisateur ressources.db.params.password = utilisateur ressources.db.params.dbname = tutoriel-zf ressources.view.doctype = "XHTML1_STRICT" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
Voila ce que j'ai rajouté dans la section [production]
sachant que mes autres appli accèdent bien à la BD avec cet" utilisateur"
Hors ligne
As-tu pensé à définir l'adaptateur par défaut ?
Zend_Db_Table::setDefaultAdapter($nomDeTaVariable);
Hors ligne
Euh non ...
en relisant la doc, au chapitre VIII A
le tuto dit :
Vous devez évidemment utiliser votre nom d'utilisateur, votre mot de passe et votre nom de base de données, pas les miens ! La connexion à la base de données sera maintenant établie automatiquement pour nous et l'adaptateur par défaut pour Zend_Db_Table sera défini.
Dernière modification par manuzed78 (27-04-2011 15:08:43)
Hors ligne
manuzed78 a écrit:
Voila ce que j'ai rajouté dans la section [production]
Et ton appli est-elle configuré pour utiliser la config de production?
Hors ligne
Ha ben non, ce doit etre ca le problème, effectivement
à un moment du tuto, on se met en développement !
et effectivement dans le .htacces il y a :
SetEnv APPLICATION_ENV development
mais alors quand on est en developpement, quels sont les avantages et ou dois je mettre le code d'acces à la BDD ?
Dernière modification par manuzed78 (27-04-2011 15:14:57)
Hors ligne
Cela permet de définir plusieurs 'mode' de fonctionnement, ainsi tu peux définir par exemple qu'en environnement de dév tu affiche les erreurs php, mais pas en environnement de prod, etc... Tu peux aussi définir différente BDD par exemple.
http://framework.zend.com/manual/en/zen … start.html
Dernière modification par shadypierre (27-04-2011 15:22:19)
Hors ligne
Bon et bien ce tuto donne la meme chose que le mien si ce n'est un
resources.layout.layout = "layout"
dans application.ini qui n'est pas dans mon tuto
A la fin de ton tuto, Shadypierre, ils créent une vue alors que moi mon bootstrap est vide...
J'ai essayé dans mon application.ini de mettre les même parametres que dans [production]
[development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 ressources.db.adapter = PDO_MYSQL ressources.db.params.host = localhost ressources.db.params.username = utilisateur ressources.db.params.password = utilisateur ressources.db.params.dbname = tutoriel-zf ressources.view.doctype = "XHTML1_STRICT"
Mais cela ne change rien ...
Hors ligne
Et en mettant juste
[production]
Hors ligne
Zenkken a écrit:
Et en mettant juste
Code:
[production]
Nan, en fait voila le fichier au complet :
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 ressources.db.adapter = PDO_MYSQL ressources.db.params.host = localhost ressources.db.params.username = utilisateur ressources.db.params.password = utilisateur ressources.db.params.dbname = tutoriel-zf ressources.view.doctype = "XHTML1_STRICT" ; Ajout du site resources.layout.layout = "layout" resources.layout.layout = "layout" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" phpSettings.date.timezone = "Europe/Paris" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
Hors ligne
Je maintiens mon idée de départ alors.
Après shadypierre a plus d'expérience que moi à n'en pas douter donc je le laisserai ou d'autres répondre afin d'éviter de t'orienter vers de mauvaises directions ou mauvais conseils.
En attendant essaie
Dans index.php (celui de base) /* ------------------------------ */ /* CONNEXION A LA BASE DE DONNEES */ /* ------------------------------ */ // Chargement automatique de Zend_Db_Adapter_Pdo_Mysql, et instanciation. $config = new Zend_Config_Ini('chemin/vers/tonfichierdeconfig.ini', 'production'); $db = Zend_Db::factory($config->database->adapter,array( 'host' => $config->database->params->host, 'username' => $config->database->params->username, 'password' => $config->database->params->password, 'dbname' => $config->database->params->dbname, ) ); // En faire la connexion par defaut Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('dbAdapter', $db); [...] $application->bootstrap() ->run();
Hors ligne
Fatal error: Class 'Zend_Config_Ini' not found in C:\wamp\www\tutoriel-zf\public\index.php on line 8
ce doit etre un probleme de version, ayant commencé aujourd'hui j'ai téléchargé la derniere version de ZF 1.11.5 ...
Hors ligne
Zenkken a écrit:
As-tu pensé à définir l'adaptateur par défaut ?
Code:
Zend_Db_Table::setDefaultAdapter($nomDeTaVariable);
En fait cette méthode de notation est bonne pour les versions antérieures à la 1.10 il me semble.
Sinon ou dois je placer l'adaptateur et $nomDeTaVariable correspond à quoi exactement?
Hors ligne
Bonjour,
A court terme, essaye la méthode de Zenkken (message #12). Elle répond à ta dernière question.
Ca n'est pas un problème de version. Là dessus, il y a une compatibilité parfaite entre les versions 1.10 et 1.11.
A+, Philippe
Hors ligne
Zenkken a écrit:
Je maintiens mon idée de départ alors.
Après shadypierre a plus d'expérience que moi à n'en pas douter donc je le laisserai ou d'autres répondre afin d'éviter de t'orienter vers de mauvaises directions ou mauvais conseils.
Sachant que index.php est dans public et que mon application.ini est dans application/configs, voila donc mon nouveau fichier index.php :
<?php /* ------------------------------ */ /* CONNEXION A LA BASE DE DONNEES */ /* ------------------------------ */ // Chargement automatique de Zend_Db_Adapter_Pdo_Mysql, et instanciation. $config = new Zend_Config_Ini('../application/config/application.ini', 'production'); $db = Zend_Db::factory($config->database->adapter,array( 'host' => $config->database->params->localhost, 'username' => $config->database->params->utilisateur, 'password' => $config->database->params->utilisateur, 'dbname' => $config->database->params->tutoriel-zf, ) ); // En faire la connexion par defaut Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('dbAdapter', $db); $application->bootstrap() ->run();
Mais il ne reconnaît pas : Fatal error: Class 'Zend_Config_Ini' not found in C:\wamp\www\tutoriel-zf\public\index.php on line 7 sachant que ma ligne 7 est bien $config = new Zend_Config_Ini('../application/config/application.ini', 'production');
Hors ligne
Tu as bien défini l'autoload des classes?
Hors ligne
Hors ligne
Holala, je suis vraiment dégouté qu'il n'y ai aucun livre ou aucune référence qui reprend tout à la base si ce n'est ce tuto que justement je n'arrive pas à faire fonctionner...
en gros il me faut $autoloader = Zend_Loader_Autoloader::getInstance();
mais à aucun endroit il est dit OU il faut le mettre,
ce qui est sur c'est que ce n'est pas dans index.php
et quand on débute, la logique générale n'est pas encore en place alors on ne peut pas le déduire ou faire fonctionner la logique ;-)
Hors ligne
manuzed78 a écrit:
en gros il me faut $autoloader = Zend_Loader_Autoloader::getInstance();
mais à aucun endroit il est dit OU il faut le mettre,
ce qui est sur c'est que ce n'est pas dans index.php
Je sais bien que c'est difficile au début (parfois aussi plus tard...)
Je ne comprends pas pourquoi tu dis que l'initialisation de l'auto-chargement ne doit pas être dans index.php/
C'est au contraire dès le début de l'exécution d'une requête que l'auto-chargement doit être disponible.
Pour ma part je fais :
require_once "../library/Zend/Loader/Autoloader.php";
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Fox1_');
et ça marche très bien en plaçant ce code dans index.php juste après la définition du chemin de l'application.
Fox1 est le nom du répertoire situé dans library où je place les classes que je développe.
Bon courage !
Hors ligne
Bonjour ;
Dans votre fichier de configuration, il vous manque ceci:
resources.db.isDefaultTableAdapter = true
Et oubliez les "bêtises" dites à propos de l'autoloader qui dans votre cas est chargé automatiquement.
Note: Avec toutes les modifications que vous avez tenté pour faire en sorte que cela fonctionne, je vous recommande de nous poster votre fichier de configuration tel qu'il est actuellement, ainsi que votre fichier index.php.
Cordialement ;
Dernière modification par nuxwin (28-04-2011 15:52:09)
Hors ligne
nuxwin a écrit:
Bonjour ;
Dans votre fichier de configuration, il vous manque ceci:Code:
resources.db.isDefaultTableAdapter = trueEt oubliez les bêtises dites à propos de l'autoloader qui dans votre cas est chargé automatiquement.
Cordialement ;
Merci Nuxwin
mon application.ini ressemble maintenant à ceci :
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 ressources.db.adapter = PDO_MYSQL ressources.db.params.host = localhost ressources.db.params.username = utilisateur ressources.db.params.password = utilisateur ressources.db.params.dbname = tutoriel-zf ressources.view.doctype = "XHTML1_STRICT" ressources.db.isDefaultTableAdapter = true resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" phpSettings.date.timezone = "Europe/Paris" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
mais le message est toujours le meme .
Y a t il une place spécifique pour ce paramètre?
Hors ligne
re ;
Et votre fichier index ? Je vais voir à corriger votre config.
Edit:
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" autoloadernamespaces[] = "Zend_" resources.frontController.env = APPLICATION_ENV resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.throwExceptions = false resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" ressources.view.doctype = "XHTML1_STRICT" resources.view.charset = "UTF-8" resources.view.contentType = "text/html; charset=utf-8" phpSettings.date.timezone = "Europe/Paris" resources.db.adapter = "pdo_mysql" resources.db.params.charset = "utf8" resources.db.params.host = "localhost" resources.db.params.username = "user" resources.db.params.password = "password" resources.db.params.dbname = "tutoriel-zf" resources.db.params.profiler = false resources.db.isDefaultTableAdapter = true ;resources.db.params.persistent = true [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.throwExceptions = true resources.frontController.params.displayExceptions = 1
Votre fichier index.php please.
Dernière modification par nuxwin (28-04-2011 13:58:32)
Hors ligne
nuxwin a écrit:
Et votre fichier index ? Je vais voir à corriger votre config.
Pour mon index.php
j'ai remis du coup ce qu'il y a dans le tuto à savoir :
<?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
Hors ligne
Pages: 1 2