Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut la compagnie
Je découvre votre site et ces forums pour la première fois et suis assez enthousiaste de l'aide que je vais pouvoir y trouver quand à ma prise en main du ZF...
J'ai develloper un CMS tous en php relativement complexe avec des solutions AJAX, frameworks JS, ...
mon objectif actuelle est de le passer sous ZF afin de disposer de ce dernier sur base d'un MVC bien propre.
Bien que j'ai lu divers tuto sur l'approche MVC du ZF, j'ai encore enormement de mal à concevoir de façon global le passage de ce CMS au MVC...
ma première question concerne le Zend_Config_ini et cette façon de stocker des infos en ini.
voici ce que j'ai fait:
// au front controller $config = new Zend_Config_ini("../../../securePath/ZFconfig_monsite.ini", 'localhost');
pour ce qui est de mon systeme j'utilise 3 db (systeme, perso, et site). Voici donc mon ini:
; Données de configuration du site de production [production] client.tld = fr client.ref_client = mon_domaine client.id_client = 1 db.adapter = pdo_mysql db.params.host = mysql.hebergeur.fr db.params.username = user db.params.password = ******** db.params.dbname = systeme_db ; Données de configuration du site en local héritant du site de production ; et surchargeant les clés nécessaires [localhost : production] client.tld = loc db.host = localhost db.username = root db.password = ********
1°) pouvez vous me dire comment faire pour avoir la possibilité de traiter sur différentes db (passer de l'une à l'autre)
2°)Mon soucis est que je souhaiterai avoir dans le ZFconfig_monsite.ini plusieurs nom de db ainsi que les different nom de table associer à chacunes de ces db... Pouvez vous me conseiller sur ce fait et sur une syntaxe à adopter pour inscrire toutes ces infos dans ce ini?
merci d'avance pour votre aide
N'hesiter pas à me faire part de vos méthodes de travaille afin que j vois un peu plus loin que le bout de mon nez...
Dernière modification par BeRoots (15-05-2008 23:04:41)
Hors ligne
tu peut faire des sections dans ton fichier ini(comme tu en as fait actuellement)
Par exemple :
[production] base=A pass=A [dev] base=B pass=B
et donc pour charger par exemple la version de dev, tu fait ce que tu as fait:
$config = new Zend_Config_ini("../../../securePath/ZFconfig_monsite.ini", 'dev');
Ca te permet de définir autant de config dont tu as besoin...et donc tu peut définir tout tes params de db là dedans...
Pour mon projet, vu qu'il doit tourner sur un peut tout les SGBD, j'ai meme mi un parametre "DbAdapter", que j'utilise dans mon script de connexion à la base
J'espere avoir répondu à ta question
Dernière modification par stf (16-05-2008 09:35:46)
Hors ligne
meme chose que stf.
astuce :
Pour éviter d'oublier de switcher l'environnement lors d'une mise en recette ou productrion,
Je place des variable d'environnement sur chaque machine, et le code charge la section du config.ini suivant cette valeur.
du coup rien a faire lorsque je livre du code, ca evite de faire une mise en prod avec l'appli qui se connecte a la base de recette (ça c'est du vécu).
Hors ligne
Merci à vous deux mais je vous colle un Hors sujet. veuillez relire l'énoncé et reprendre vos copie
Nan en fait c'est exactement ce que je fait mais regarder bien les deux question numérotes
en gros je veut savoir comment switcher entre plusieurs DB et aussi si i est judicieux de mettre mes mon de table/db dans ce ini...
merci d'avance pour vos réponses
Hors ligne
Désolé, j'ai lu un peu vite.
Bon je tente la session de rattrapage :
si j'ai bien compris tu as trois sources de données.
Moi je gererai ca plutot dans le code:
j'ecrirais une sorte d'adapterManager qui renverrai le bon db adapteur suivant le contexte.
en gros getAdapteur($nomDemaTable) et ton Manager renvoie le bon $db suivant la table demandée.
ton Manager lirait dans ton config.ini quel adapteur il doit fournir suivant la table damandée.
[db1] db.host = monHost db.login = monLogin ....... dbTable = MaTable [db2] db.host = monHost db.login = monLogin ....... dbTable = MaTable2
getAdapteur("MaTable2") renvoie le $db cree a partir des infos de la section DB2.
C'est juste une idée.
Je suis peut-etre recallé sur ce coup :-(
Dernière modification par ichevc02 (16-05-2008 12:14:45)
Hors ligne
Hmmm, l'idée semble bonne. Mais ce n'était que l'examen blanc bien sur
En faite pour un Adpteur oui et non, j'ai peut être manquer de précision dans l'énoncé ?
En faite mon système me définit 4 global au bootstrap (front controller) donc les composante sont situées en 3 DB.
Mon objectif serai de me connecter successivement à ces 3 DB pour chaque appel au bootstap (chaque action), ou afin de voir si possible de sauver ceci au registre durant tout le temps de la visite de l'internaute (donnée sensible donc pas en session et donc voir si sécurité suffisante au registry)...
En gros de suite, on a donc 3 chose importante:
- la charge system pour ces 4 requêtes mysql à chaque appel au bootstrap (sauf si registry)
- la notion de sécurité (une global le temps de l'exécution ou en registry)
- la méthode à utiliser sachant que l'on doit successivement faire appel à 3 db différentes sur un même serveur)
les données retourner sont essentiels donc pour le moment je verrai plutôt cette solutions:
- un enchainement au bootstrap de 4 requêtes sur les 3 DB avec valeur mise en global à chaque appel de page du projet
ma question sera donc:
1°) comment faire pour avoir une connexion successive à 3 base de données differentes sur le même serveur ?
Doit je faire ceci 3 fois ???
// Mise en place de la BDD $db = Zend_Db::factory($config->db); Zend_Db_Table::setDefaultAdapter($db);
Dernière modification par BeRoots (16-05-2008 19:12:37)
Hors ligne
Oups
Je pense que oui, c'est la seule solution de créer 3 connexions à la base et d'en disposer à loisir
Hors ligne
Bonjour,
j'ai eu le même besoin (initialiser 2 connexions sur 2 BDD différentes). La réponse n'ayant pas été donnée ci-dessus et comme j'ai pas mal galéré avant de la trouver, je la poste ici à toutes fins utiles.
Mon erreur initiale a été de vouloir déclarer les 2 configurations dans des sections différentes du fichier config.ini et de tenter de les charger successivement comme cela :
$config1 = new Zend_Config_Ini('../application/config.ini', 'principal'); $db = Zend_Db::factory($config1->db); $config2 = new Zend_Config_Ini('../application/config.ini', 'second'); $db2 = Zend_Db::factory($config2->db);
Ca ne marche pas ainsi.
Il faut simplement déclarer les 2 configurations (ou plus) dans la même section du config.ini et donner des noms différents aux 2 objets "db" dans ce fichier. Par exemple :
[general] db.adapter = MYSQLI db.params.host = server1 db.params.username = user1 db.params.password = pwd1 db.params.dbname = db1 db2.adapter = MYSQLI db2.params.host = server2 db2.params.username = user2 db2.params.password = pwd2 db2.params.dbname = db2
et récupérer les 2 configs :
$config = new Zend_Config_Ini('../application/config.ini', 'general'); $db = Zend_Db::factory($config->db); Zend_Registry::set('db', $db); Zend_Db_Table_Abstract::setDefaultAdapter($db); $db2 = Zend_Db::factory($config->db2); Zend_Registry::set('db2', $db2); // pour selectioner une connexion dans l'application : $db2 = Zend_Registry::get('db2');
Hors ligne