In meinem Projekt werden verschiedene Datenbanken mit dem gleichen Aufbau verwendet. Bevor man die Anwendung also verwenden kann, wird man auf eine Seite umgeleitet auf der die Datenbank ausgewählt werden muss.
Hierzu habe ich in AppController::beforeFilter eine Abfrage eingebaut: Hat der Benutzer keine Datenbank ausgewählt => "Loginseite", wurde eine Datenbank ausgewählt => Datenbank-Konfiguration erstellen und Verbindung herstellen.
- Code: Alles auswählen
- function beforeFilter() {
echo "AppController::beforeFilter";
//Check if user has selected a Database
if ($this->Session->read("database_selected")) {
//Establish database connection
$config = array(
'driver' => 'postgres',
'persistent' => false,
'host' => 'localhost',
'port' => 5432,
'login' => $this->Session->read("dbUser"),
'password' => $this->Session->read("dbPass"),
'database' => $this->Session->read("dbDatabase"),
'prefix' => '',
);
$db =& ConnectionManager::create("cdt", $config);
var_export(pg_fetch_all($db->execute("select * from folders;"))); //Test
} else {
//Save current page
$this->Session->write("login_target", Router::url("", true));
//Redirect to login page
$this->redirect(array('controller' => "users", 'action' => "login"));
}
}
Soweit so gut. Die Zeile mit dem Kommentar "Test" funktioniert.
Nun sage ich den Models welche Datenbank-Konfiguration sie verwenden sollen mit
- Code: Alles auswählen
- var $useDbConfig = "cdt"
Rufe ich nun einen Controller, der ein solches Model verwendet, auf, dann kommt folgendes:
Fatal Error (256): ConnectionManager::getDataSource - Non-existent data source cdt [CORE\cake\libs\model\connection_manager.php, line 109]
Daraus schließe ich, dass ich die Datenbank-Konfiguration früher erzeugen muss..nur wo?
Controller::loadModel überladen?
Hoffe ihr könnt mir weiterhelfen!
Danke!