Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je me replonge actuellement dans le ZF et je révise tout depuis le début, et ça se présente pas bien
Depuis ZStudio je crée un projet ZF "test", bootstrap de base, index.php et application.ini semblent ok.
J'accède bien à ma page d'index par défaut depuis localhost/test/public/
Maintenant je me fais une petite connexion PDO_MYSQL, c'est là que ca se complique.
Mon fichier application.ini comporte ceci :
db.adapter = "pdo_mysql" db.params.host = "localhost" db.params.dbname = "bdd" db.params.username = "user" db.params.password = "password"
je fais un test vite fait depuis le bootstrap.php
$db = Zend_Db::factory($config->db); Zend_Registry::set('centrale', $db); // je l'enregistre pour plus tard $query = "SELECT fin_abo FROM abos"; $result = $db->fetchAll($query); Zend_Debug::dump($result);
Résultat comme prévu avant ma page index par défaut Zend
array(1) { [0] => array(1) { ["fin_abo"] => string(10) "1342111058" } }
Le souci c'est que rien ne va plus lorsque j'applique les mêmes scripts dans indexController.php
public function indexAction() { // action body $db = Zend_Db::factory($config->db); $query = "SELECT fin_abo FROM abos"; $result = $db->fetchAll($query); Zend_Debug::dump($result); }
J'obtiens le message d'erreur suivant :
An error occurred
Application error
Et encore là je n'ai pas commencé à attaquer la méthode utilisant les "Models"
Donc les paramètres de connexion à la bdd sont bons.
Tout fonctionne depuis le bootstrap
Rien ne fonctionne depuis un controller.
Quelqu'un aurait il une idée ?
En vous remerciant.
Dernière modification par Flush (08-08-2012 17:36:33)
Hors ligne
Je précise que j'ai essayé le script en laissant tout dans le bootstrap puis en supprimant ma requête du bootstrap, le résultat est le même.
Hors ligne
Bonjour,
autre précision, j'ai bien entendu scruté à plusieurs reprises les forums et doc officielle, en vain.
Peut être n'ai je rien compris à ce framework, ou simplement un élément évident m'échappe.
Il semble en fait que je n'ai pas accès à la base autrement que depuis le bootstrap.
J'ai également essayé de laisser la connection au niveau du bootstrap et effectuer la requete depuis le controller, idem
Merci à vous.
Hors ligne
Bonjour,
C'est le seul message que tu as ?
"An error occurred
Application error"
Dans application.ini
Si les directives phpSettings.display_startup_errors, phpSettings.display_errors et resources.frontController.params.displayExceptions ont pour valeur "0"
et que dans public/index.php
Si "production" est la valeur de APPLICATION_ENV
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
et bien change tout simplement la valeur de APPLICATION_ENV par development et tu auras un rapport d'erreur beaucoup plus detaille.
public/index.php
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));
Dernière modification par us2rn4m2 (09-08-2012 17:43:45)
Hors ligne
Bonjour us2rn4m2,
merci beaucoup pour cette première réponse, voici le nouveau message d'erreur
An error occurred Application error Exception information: Message: Adapter name must be specified in a string Stack trace: #0 /share/HDA_DATA/Qweb/testZF/application/controllers/IndexController.php(16): Zend_Db::factory(NULL) #1 /share/HDA_DATA/Qweb/testZF/library/Zend/Controller/Action.php(516): IndexController->indexAction() #2 /share/HDA_DATA/Qweb/testZF/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction') #3 /share/HDA_DATA/Qweb/testZF/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #4 /share/HDA_DATA/Qweb/testZF/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #5 /share/HDA_DATA/Qweb/testZF/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #6 /share/HDA_DATA/Qweb/testZF/public/index.php(26): Zend_Application->run() #7 {main} Request Parameters: array ( 'controller' => 'index', 'action' => 'index', 'module' => 'default', )
En fait à force de ramer j'avais tout repris depuis le début, du coup je n'avais pas paramétré comme il faut pour le dev.
En gros ce nouveau message c'est "Adapter name must be specified in a string"
J'avoue ne pas comprendre, puisque ca marche dans le bootstrap ?
Merci encore.
Hors ligne
Le probleme vient de $config (ou de application.ini) mais tu nous as pas donne les ligne de code avec lesquelles tu l'instancie dans Bootstrap.php et dans indexController.php
En attendant:
Ton application.ini doit ressembler a ça:
[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
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.dbname = "bdd"
resources.db.params.username = "user"
resources.db.params.password = "password"
[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
Dans ton indexController.php (ou dans le Bootstrap.php)
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'production'); $db = Zend_Db::factory($config->resources->db); $query = "SELECT fin_abo FROM abos"; $result = $db->fetchAll($query); Zend_Debug::dump($result);
Tu testes.
Dernière modification par us2rn4m2 (29-08-2012 15:39:57)
Hors ligne
Merci pour la réponse,
je n'ai pas eu le temps de tester (coupure internet)
Je dois m'absenter les 15 prochains jours et je ne pourrais sans doute pas tester,
néanmoins je m'y remettrai dès que possible et vous tiendrez au courant.
Merci beaucoup.
Flush.
Hors ligne
Bonjour,
j'ai donc testé et ça marche.
En effet il manquait le "resources" dans la config de la bdd.
Par contre lorsque je fais un test sur l'indexController.php je suis obligé de reconstruire la connection:
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development'); $db = Zend_Db::factory($config->resources->db);
Dans ce cas pourquoi l'instancier dans le bootstrap ?
Quelque chose m'échappe toujours ?
Je vais faire une recherche sur le forum des fois que ..
Merci encore.
Hors ligne
De rien
Hors ligne
Pas besoin de construire la connexion, tu dois avoir une erreur quelque part si ça ne fonctionne pas sans.
Hors ligne
Dans le boostrap, essaye cette ligne
[lang=php]Zend_Registry::set('db', $db);
au lieu de
[lang=php]Zend_Registry::set('centrale', $db); // je l'enregistre pour plus tard
Si je ne me trompe, Zend_Db cherche l'adapteur dans le registre avec la clé 'db'. Si tu spécifie une autre tu devra modifier la config Zend_Db.
Dans le bootstrap ça marche parce que l'adaptateur est déjà instancié
[lang=php]$db = Zend_Db::factory($config->db);
Dans le reste da l'appli c'est l'adapteur du registre qui sera appelé.
Dernière modification par lesauf (01-09-2012 21:48:57)
Hors ligne
Bonjour,
merci à tous pour ces réponses.
Voici ce que j'obtiens au final
application.ini
[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 [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 resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.dbname = "dbname" resources.db.params.username = "username" resources.db.params.password = "password" resources.db.isDefaultTableAdapter = true
bootstrap.php
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { } $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development'); $db = Zend_Db::factory($config->resources->db); Zend_Registry::set('config', $config); Zend_Registry::set('db', $db);
indexController.php
<?php class IndexController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { // action body $db = Zend_Registry::get(db); $query = "SELECT fin_abo FROM abos"; $result = $db->fetchAll($query); Zend_Debug::dump($result); } }
En revanche pour répondre à Lesauf, si dans registry je mets par exemple "test" à la place de "db" ca fonctionne aussi.
Mais cela signifie qu'il faut bien toujours refaire appel à $db ( $db = Zend_Registry::get(db) ) pour effectuer une tâche sur la bdd, non ?
Merci encore de votre aide, j'ai encore beaucoup à revoir
Dernière modification par Flush (02-09-2012 19:36:00)
Hors ligne
Pages: 1