Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-08-2012 17:15:51

Flush
Nouveau membre
Date d'inscription: 08-08-2012
Messages: 7

[Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

Bonjour,

je me replonge actuellement dans le ZF et je révise tout depuis le début, et ça se présente pas bien sad

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 :

Code:

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


Code:

    $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

Code:

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

Code:

    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

 

#2 08-08-2012 17:17:45

Flush
Nouveau membre
Date d'inscription: 08-08-2012
Messages: 7

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

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

 

#3 09-08-2012 15:08:46

Flush
Nouveau membre
Date d'inscription: 08-08-2012
Messages: 7

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

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 hmm

Merci à vous.

Hors ligne

 

#4 09-08-2012 17:38:39

us2rn4m2
Membre
Date d'inscription: 07-05-2011
Messages: 104

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

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

 

#5 09-08-2012 18:10:01

Flush
Nouveau membre
Date d'inscription: 08-08-2012
Messages: 7

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

Bonjour us2rn4m2,

merci beaucoup pour cette première réponse, voici le nouveau message d'erreur

Code:

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

 

#6 09-08-2012 20:09:41

us2rn4m2
Membre
Date d'inscription: 07-05-2011
Messages: 104

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

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)

Code:

$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

 

#7 11-08-2012 12:36:39

Flush
Nouveau membre
Date d'inscription: 08-08-2012
Messages: 7

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

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

 

#8 28-08-2012 23:39:53

Flush
Nouveau membre
Date d'inscription: 08-08-2012
Messages: 7

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

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:

Code:

$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

 

#9 30-08-2012 12:56:55

us2rn4m2
Membre
Date d'inscription: 07-05-2011
Messages: 104

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

De rien smile

Hors ligne

 

#10 30-08-2012 13:59:09

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

Pas besoin de construire la connexion, tu dois avoir une erreur quelque part si ça ne fonctionne pas sans.

Hors ligne

 

#11 01-09-2012 21:36:10

lesauf
Membre
Lieu: Yaoundé - Cameroun
Date d'inscription: 29-11-2007
Messages: 52
Site web

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

Dans le boostrap, essaye cette ligne

Code:

[lang=php]Zend_Registry::set('db', $db);

au lieu de

Code:

[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é

Code:

[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

 

#12 02-09-2012 19:33:48

Flush
Nouveau membre
Date d'inscription: 08-08-2012
Messages: 7

Re: [Zend_Db][1.11]Bdd ok depuis le bootstrap mais pas depuis un controler

Bonjour,

merci à tous pour ces réponses.
Voici ce que j'obtiens au final

application.ini

Code:

[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

Code:

<?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

Code:

<?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 smile

Dernière modification par Flush (02-09-2012 19:36:00)

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