> Where is a good place to put app-specific configuration, and how would  
> this be accessed within code. Say, for example, the number of blog  
> posts to show on a page...?
>

You can easily use app/config/settings.xml for (environment specific) 
application wide settings.

Example:

<configuration environment="production">
  <settings prefix="Example.">
    <setting name="enabled">true</setting>
    <setting name="EntriesPerPage">25</setting>
    <setting name="DefaultColor">green</setting>
  </settings>
</configuration>

You then get values like this:

$entries_per_page = AgaviConfig::get('Example.EntriesPerPage', 
$default_in_case_not_defined);

In case you have some logging functionality in your application you could for 
example use something like the following to prevent logging based on the 
"core.use_logging" setting (e.g. false in production environment, true 
otherwise):

if (AgaviConfig::get('core.use_logging', false))
{
  $this->getContext()->getLoggerManager()->log(new 
AgaviLoggerMessage(strftime('[%Y-%m-%d %H:%M:%S]', time()).' 
'.get_class($this).': '.$msg), $log_level);
}

Settings can be defined globally and then be overwritten in lower sections. 
E.g. you define a default setting for something and then override this for 
environment "production" later on in settings.xml. So you have a different 
setting just for production while other environments remain untouched and get 
the global setting.

Another possibility would be to get config settings from your own XML files by 
using XPath/DOM and some Agavi classes:

<configuration environment="development">
  <some name="nested-setting">
    <ae:parameters>
      <aE:parameter name="value1">value1</ae:parameter>
      <ae:parameter name="value2">value2</ae:parameter>
    </ae:parameters>
  </some>
</configuration>


$doc = new AgaviXmlConfigDomDocument();
$doc->load(AgaviConfig::get('core.config_dir').'/your_settings.xml');
// ... XPath query or whatever etc.

or

$cfg = AgaviConfig::get('core.config_dir').'/your_setting.xml';
$config = include(AgaviConfigCache::checkConfig($cfg));
$nested_something = $this->config['some']['nested-setting'];
$value1 = $nested_something['parameters']['value1'];
$value2 = $nested_something['parameters']['value2'];

You get the point (untested). :)

Remember, that you can always set values programatically using:

AgaviConfig::set('some.setting', 'some_value');

as you can see in index.php or config.php of your application.


Hope it helps.

Steffen

_______________________________________________
users mailing list
[email protected]
http://lists.agavi.org/mailman/listinfo/users

Reply via email to