Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-07-2007 08:38:06

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

[Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Bonjour, je suis confronté à quelques problèmes pratiques lors de mon utilisation de Zend.

Je voudrais pouvoir utiliser Zend_DB un peu partout dans mon projet. J'entends par la que ayant déclaré sur mon index.php:

$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);

Je m'attendais à pouvoir utiliser $db sur toutes les pages du site mais je n'y arrive pas. J'entends par la que je pensais que j'aurais pu appeller $db à ma guise nimporte où dans mon code mais cela ne fonctionne pas. Et particulièrement pour un appel de $db dans un controlleur, où j'obtiens 'Notice: Undefined variable: db'. C'est à ne rien y comprendre. Ce n'est pas une erreur de syntaxe car la variable porte bien le bon nom.

Dans la même veine j'exécute du javascript asynchrone qui va rechercher des informations sur une base de données. C'est informations sont pourvues au moyen d'une page qui va chercher les instructions, mais à cette page je voudrais utiliser $db, n'est ce vraiment pas possible ? parce que pour le moment j'en suis réduit à  utiliser mysql_connect.

Merci d'avance pour vos réponses et suggestions.

Hors ligne

 

#2 18-07-2007 08:48:54

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Il faut que tu enregistre ton adapter en Registry dans l'index, tu pourra ensuite l'utiliser dans tes controllers. Va voir dans le tuto d'introduction et fait pareil : ça marche très bien de mon coté smile

Hors ligne

 

#3 18-07-2007 08:51:12

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

idem que haltabush. Sinon le Zend_Db_Table::setDefaultAdapter($db); sert à indiquer que si tu utilises des objets  qui héritent de Zend_Db_Table, pour eux et uniquement pour eux, ils vont utiliser ta connexion $db de façon transpartente.
A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 18-07-2007 19:23:04

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

J'ai bien fait :

$config = new Zend_Config_Ini('./application/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);

Est ce de cela que vous parlez ? ou bien faut il que je cherche une méthode $registry->set($db) ??? :s
Peut etre est ce que je ne sait pas comment utiliser $db... je suis désespéré sad

Hors ligne

 

#5 18-07-2007 20:18:31

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Non, ce n'est pas la config que tu dois stocker mais l'adapter.

Code:

$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
$registry = Zend_Registry::getInstance();
$registry->set('adapter', $db);

et quand tu veux t'en servir qq part, tu le récupère

Code:

$db = $registry->get('adapter');

Hors ligne

 

#6 18-07-2007 21:04:13

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

J'ai éssayé ca, ca ne marche pas. J'ai éssayé daccéder à $registry depuis le controleur et depuis une vue ca ne passe pas. :s

Hors ligne

 

#7 18-07-2007 21:25:21

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

bah depuis le controller, $registry il faut le récupérer aussi smile c'est un singleton, donc meme procédure qu'au début, et tu récupère la meme instance.

donc dans le controller, ou depuis n'importe où :

Code:

$registry = Zend_Registry::getInstance();

Hors ligne

 

#8 18-07-2007 21:51:36

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Re... Il m'a suffit de faire : $db = Zend_Registry::get('adapter'); pour récuperer $db.   Je ne suis pas très calé concernat l'utilisation judicieuse des méthodes. Mais voila ca marche. Merci quand même.:d

Hors ligne

 

#9 18-07-2007 21:58:16

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

C'est une autre facon de faire. Comme au dessus, tu recupérais une instance dans une var local, j'ai fais pareil, mais tu peux effectivement utiliser les appel static. Les 2 fonctionnent smile

Hors ligne

 

#10 18-07-2007 22:08:27

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Sinon en ce qui concerne l'utilisation de db pour des pages qui ne passent pas par index.php comment puis je faire ? Typiquement les pages ajax qui discutent avec le serveur de BDD

Hors ligne

 

#11 18-07-2007 22:23:36

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Bah de la meme facon. L'accès a la BDD n'a rien a voir avec le MVC.

Code:

try {
    $db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
    $db->getConnection();
    // A faire uniquement si tu as des object qui dérive Zend_Db_Table_Abstract, sinon, c'est inutile.
    Zend_Db_Table::setDefaultAdapter($db);
    // Si ton code ajax est une class et que tu veux accéder à $db tu peux toujours le mettre en registry
    Zend_Registry::set('adapter', $db);
}
catch (Zend_Db_Adapter_Exception $e) {
    echo 'Zend_Db: Adapteur exeption ' . $e->getMessage();
}
catch(Zend_Exception $e) {
    echo 'Zend_Db: Factory exeption' . $e->getMessage();
}

...

// et tu le récupère comme d'hab 
$db = Zend_Registry::get('adapter');

Dernière modification par TiTerm (18-07-2007 22:24:10)

Hors ligne

 

#12 19-07-2007 08:32:52

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Chez moi, les requêtes ajax passent par index.php. J'ai un controlleur particulier qui gère toutes mes requêtes ajax et les convertit dans le format adéquat.
Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#13 19-07-2007 08:53:49

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

TiTerm a écrit:

.... L'accès a la BDD n'a rien a voir avec le MVC.....

Là, je dois avouer que j'accroche un peu. Mon niveau en POO n'a rien de pharamineux, mais selon le Design Pattern MVC, corrigez-moi si je fais erreur, cette assertion est fausse : le Contrôleur traite et prépare les données, données affichées par la Vue mais récupérées par le Modèle. L'accès aux données rentre parfaitement dans le design Pattern dans la partie Modèle. C'est du reste bien là qu'on met les dataObjects de l'ORM pour les tables du schéma utilisé. Non ? Alors je dois bien constater qu'avec le ZF on peut très bien avoir un répertoire modèle vide et l'architecture du framework prend parfaitement en charge l'accès aux données en court-circuitant cette partie, mais est-ce que ce n'est pas là qu'on devrait trouver les extensions maison pour les accès moins standards ?


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#14 19-07-2007 09:32:50

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Certes dans un MVC, on a un accès aux données localisé dans le modèle.

Par contre, on peut tout à fait accéder à des données en base sans utiliser de MVC. Rien n'empêche d'utiliser directement Zend_Db dans un script isolé (un script en ligne de commande par exemple ou une page d'admin quelconque...). Je pense que c'était le sens de la remarque de TiTerm.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#15 19-07-2007 09:34:52

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Cyrano, je n'ai peut etre pas été claire dans ma réponse mais je répondais à la remarque précédente uniquement. Sortie de son contexte, il est évident que ca prete à confusion.
La question reformulée comme je l'ai compris était  :
   "comment faire pour accéder a la BDD quand on ne passe pas par l'index.php (le front Controller), par exemple dans le cas Ajax ?".

D'ou ma réponse: On n'a pas besoin d'un MVC pour accéder a la BDD.
Mais je n'ai pas dit que l'accès BDD n'était pas décrit dans le pattern MVC.

Pour rebondir sur ce que dit philipe, j'ai effectué un choix similaire et j'ai un un helper dédié à l'AJAX et donc mes accès BDD sont gérés par le Modèle smile

Hors ligne

 

#16 19-07-2007 10:00:02

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Zend_DB][Version 1.0.0] Pratique : Accès transparent à Zend DB

Ça me rassure, au moins j'ai pas dit une connerie big_smile


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

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