How to add Local Config Variables to Yii

Often times you want to be able to specify configuration parameters or settings that only apply to a single environment. These local configuration don’t need to, and shouldn’t be entered into version control, and should over ride default values. I needed a solution for a project I was working on so I wrote one for Yii.

The main configuration file protected/config/main.php returns an array of parameters. Edit this file to merge 2 arrays, 1 from main.php, and another from local.php.

Edit main.php to look like this:

<?php

return CMap::mergeArray(

array(

'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',

'name'=>'Web app',

... other parameters ...

'params'=>array(

// this is used in contact page

'adminEmail'=>'[email protected]',

),

),

local_config()

);

// return an array of custom local configuration settings

function local_config()

{

if (file_exists(dirname(__FILE__).'/local.php'))

{

return require_once(dirname(__FILE__).'/local.php');

}

return array();

};

And then add any of your own configuration to local.php in the same config directory.

<?php

return array(

'components'=>array(

'db'=>array(

'connectionString' => 'mysql:host=localhost;dbname=db_name',

'username' => 'my_user',

'password' => 'secret',

'enableParamLogging'=>true,

),

'log'=>array(

'class'=>'CLogRouter',

'routes'=>array(

'file'=>array(

'class'=>'CFileLogRoute',

'levels'=>'trace, info, error, warning',

),

'profile'=>array(

'class'=>'CProfileLogRoute',

'report'=>'summary',

),

),

),

),

'params'=>array(

// this is used in contact page

'adminEmail'=>'[email protected]',

),

);

Here we’ve overridden the adminEmail parameter to [email protected], we’ve added in custom database username and password, and we’ve enabled logging.

Feel free to use this as a straightforward way to add custom config values to your Yii project. Just remember to make local.php an ignored file in Git or Subversion.

  1. How Override Yii framework’s config/console.php with local console configuration file? | Gravity Layouts:

    [...] framework’s config/main.php file can be overwritten by a local.php configuration file via an array_merge. This allows me to set different database [...]

  2. handoyo:

    Hi,i came across to your site and found your tutorial.It’s great.Is it possible to add write or change the local.php content from yii?Suppose i want to activate and deactivate modules etc.Thanks a lot. :)

  3. Mark:

    It definitely would be possible to build that functionality from yii. You’d have to handle all the complexity that goes into nested array statements, and a nice UI To display it all, but it’s perfectly do-able. I’d love to see the code if you make it.