Steffen,

thanks for the explanations.

Two things I'd like to add:

- never, ever, use the XML config stuff directly - write a config handler instead
- consider using AgaviReturnArrayConfigHandler
- note that <configuration> sections are sorted first (vanilla, env- only, context-only, env+context), and then merged together

That was three. Oh well.

David


On 16.02.2009, at 23:48, [email protected] wrote:

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


Attachment: smime.p7s
Description: S/MIME cryptographic signature

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

Reply via email to