Om CakePHP applicatie wat verder uit te werken, heb ik een eigen config file geschreven (customConfig.php). Hier check ik via de server name of ik al dan niet lokaal bezig ben:

<?php

$config = array(
'Company' => array(
'name' => 'Optiek Cardoen',
'email' => '[email protected]'
)
);

switch ($_SERVER['SERVER_NAME']) {
case 'local.optiekcardoen.be':
$config = array_merge($config, array(
'debug' => 2,
'Database' => array(
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'xxx'
)
));
break;
default:
$config = array_merge($config, array(
'debug' => 0,
'Database' => array(
'host' => 'localhost',
'login' => 'xxx',
'password' => 'xxx',
'database' => 'xxx'
)
));
break;
}

?>

Ik vraag me nu af of het vanuit deze config file mogelijk is om te bepalen welke database er in moet worden geladen (de lokale database of de productie database). Iemand die hier ervaring mee heeft? ;)
Dit doe je hier toch al op basis van servername? Of heb je dev en productie op dezelfde server?
Onder 'Database' heb je een array met de host(naam) van de databaseserver plus 'database' voor de naam van de database:

<?php
       $config = array_merge($config, array(
            'debug' => 0,
            'Database' => array(
                'host' => 'localhost',  // <-- Dit is je databaseserver.
                'login' => 'xxx',
                'password' => 'xxx',
                'database' => 'xxx'     // <-- En dit de database op die server.
            )
        ));
?>
Wel, het grote probleem is dat de database gegevens vanuit deze config file niet aan worden gesproken om een connectie met de database te leggen. Het zijn echter de (default) gegevens uit app/config/database.php dat voor de database connectie zorgen:

<?php
class DATABASE_CONFIG {

/* Staging */

public $local = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'xxx',
'password' => 'xxx',
'database' => 'xxx',
'prefix' => '',
'encoding' => 'utf8',
);

/* Production */

/*public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'xxx',
'password' => 'xxx',
'database' => 'xxx',
'prefix' => '',
'encoding' => 'utf8',
);*/

/* Testing */

/*public $test = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'test_database_name',
'prefix' => '',
//'encoding' => 'utf8',
);*/
}
?>

Dat is dus iets wat ik anders wil en vanuit m'n "customConfig.php" wil laten gebeuren. Hopelijk heb ik m'n probleem hiermee wat duidelijker uitgelegd? ;)
Makkelijkste zou zijn om deze check ook in de database.php te doen.

Is dit in cakephp2 of 3?

Want volgens mij kan het in 2 niet op deze manier, het volgende zou moeten werken
<?php
App::uses('ConnectionManager', 'Model');
ConnectionManager::loadDataSource(array(
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'xxx'
));
?>

Reageren