Magento Stack Exchange is a question and answer site for users of the Magento e-Commerce platform. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm creating an extension that exposes an API to another web site. My extension will create an API key, and then you'll copy this API key into the other web site, which will let Magento and the other site exchange data.

I've created a system.xml entry for my API key. I'd like for the default value for this config item to be populated by a call to a generateApiKey method defined in PHP code.

In pseudocode, config.xml:

                <apikey><?php echo $obj->generateApiKey(); ?></apikey>

I know that that's not possible, but hopefully that conveys what I want to do.

How can I programmatically generate (and save) a default value for something defined in system.xml?

share|improve this question
up vote 2 down vote accepted

I'd suggest populating the value via a data migration script. Create a resource in your module's config.xml:


Create a the migration script: MyNamespace/MyExtension/data/my_namespace_my_extension/data-install-1.0.0.php

/* @var $this Mage_Core_Model_Resource_Setup */
$generatedKey = Mage::helper('my_extension')->generateApiKey();
$this->setConfigData('my_extension/api_connection/apikey', $generatedKey);

NOTE: the cache would most likely need to be cleared after installation. This should be made clear in your module's installation instructions. It should also be possible to flag the cache as invalidated.

share|improve this answer
Is that going to work? The setConfigData method will set the node value, but it won't persist the value to a database anywhere. – Alan Storm Mar 10 '14 at 18:59
It should, checkout the source here. Are you referring to Mage::getConfig()->setNode() perhaps? – beeplogic Mar 10 '14 at 19:02
Should this install script have the usual $installer->startSetup() and $installer->endSetup() calls? – skyler Mar 10 '14 at 19:11
It's not necessary, the "data" scripts are meant for populating data. The start/end setup methods concern themselves with how the database behaves (e.g. turning off foreign key constraints). – beeplogic Mar 10 '14 at 19:19

You can just save it into core_config_data.

So either in $setup->setConfigData($path, $value) or Mage::app()->getConfig()->saveConfig($path, $value) but be careful, the second one doesn't clean the cache.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.