Search This Blog

Loading...

Monday, September 7, 2009

How to Retrieve database Information from databases.yml in Symfony

Sometimes you need to access the database information, such as dsn, database username or password from the databases.yml in your Symfony application. Since databases.yml is just a yml file, you can always find the file, parse the information in the file and read the information you want.

Needless to say this is a very arduous task, even with a yml parser. Furthermore, the fact that there are multiple environments in one single databases.yml can complicated the task of obtaining the correct set of variables.

An alternative way to do it is to use the underlying Symfony library. Suppose that you have the following databases.yml:

dev:
  db3:
    param:
      classname: DebugPDO
test:
  db3:
    param:
      classname: DebugPDO
      dsn: 'mysql:dbname=mydbtest;host=localhost'
all:
  db3:
    class: sfPropelDatabase
    param:
      classname: PropelPDO
      dsn: 'mysql:dbname=mydb;host=localhost'   #where the db is located
      username: root
      password: password
      encoding: utf8
      persistent: true
      pooling: true

Here's how you can obtain the dsn, username and password information from the above yml:
$appConfig= ProjectConfiguration::getApplicationConfiguration('frontend', 'test', true);
$dbManager= new sfDatabaseManager($AppConfig);
$db3=$dbManager->getDatabase('db3');
$username = $db3->getParameter('username');  //root
$dsn= $db3->getParameter('dsn');  //mysql:dbname=mydbtest;host=localhost because it's test config
$password= $db3->getParameter('password');  //password

Simple, isn't it?

1 comment:

Anonymous said...

And it has analogue?