je cherche un systeme, pour qu'un ensemble de modeles puisse se connecter à différentes bases de données, en fonction d'un parametre de l'url

J'explique le but:

mon site va contenir des outils pour un jeu en ligne, sur lequel il y a plusieurs "serveurs" de jeu

j'ai, entre autres, un model Player qui correspond au joueurs d'un serveur, et j'aimerai que ce model puisse utiliser une base de donnée différente en fonction du premier parametre de l'url : http:// monsite.fr/servername/players

Existe t il un moyen pour réaliser ça simplement ?

par exemple en utilisant une route, qui extrait ce premier parametre pour connecter a la bonne base de donnée, en renvoyant vers le controller qui suit (je pense l'idée pas mal, mais je vois pas comment réaliser la route en question ^^)

"Plan" des bdds :

Dans une premiere base de donnée, j'aurai :
ma table users, pour gérer les utilisateurs du site
une tables servers qui contiendra la liste des serveurs du jeu, ainsi que la bdd a utiliser pour chaque serveur.

et ensuite, j'aimerai avoir une bdd pour chaque serveur, qui contiendraient chacunes les memes tables corespôndant à mes modeles, avec les données propres au serveur.

3 réponses


Tous les modèles doivent hériter d'un model principal (en général AppModel)

Dans cet AppModel tu as une variable

public $useDbConfig = 'alternate';

Ce que tu peux aussi faire c'est créer une sous class de AppModel que tu va appeller ChangeableAppModel extends AppModel{} et ne changer le useDbConfig que dans cette classe. Du coup tes modèles changeant hériteront de ChangeableAppModel

Bonjour ,

A essayer :
App::uses('ConnectionManager', 'Model');
ConnectionManager::create("newDataSource",array('driver' => 'mysql', etc....) )
$this->Model->setDataSource("newDataSource");

cordialement

Antho

Pour la question IRC :
<?php
class ChangeableModel extends AppModel{
public $useDbConfig = 'chandgeable';
}
?>

Modele Welcome :

App::uses('ChangeableModel','Model');
class Welcome extends ChangeableModel{

}

debug($this->Welcome->useDbConfig) renvoit bien 'changeabl' depuis le controller WelcomesController