Magento 1 – Call Action After Save Config Clicked in Admin

configurationcontrollersevent-observermodule

How can I call an action of my controller in a custom module after "Save Config" was clicked in System –> Configuration –> Catalog? (image)

Settings of my module are inside that section, and I need to fire my action just after configuration was saved. I need to call the action only in that section of the admin panel – if "Save Config" was clicked in a different section of the admin, the action don't need to be called.

EDIT:

Action has to check if saved settings of the module are correct, and do some other calculations every time the configuration is saved.

EDIT 2:

I tried solution posted by Fabian Blechschmidt. Observer is working after "Save Config" was clicked (I see text in log file):

config.xml:

<config>
...
    <global>
        <events>
            <admin_system_config_changed_section_mysection>
                <observers>
                    <mymodule>
                        <type>singleton</type>
                        <class>mymodule/observer</class>
                        <method>handle_adminSystemConfigChangedSection</method>
                    </mymodule>
                </observers>
            </admin_system_config_changed_section_mysection>
        </events>
    </global>
...
</config>

Model/Observer.php:

class My_Module_Model_Observer
{
    public function handle_adminSystemConfigChangedSection()
    {
        Mage::log('Test: oberver is working!');

        //I tried this but it doesn't actually trigger the action:
        $url = Mage::getUrl('myrouter/adminhtml_test/validate');
        Mage::app()->getResponse()->setRedirect($url);
    }
}

But now I'm stuck.

I don't know how to trigger action method inside that observer. Controller looks like this and it works fine:

config.xml:

<admin>
    <routers>
        <mymodule>
            <use>admin</use>
            <args>
                <module>My_Module</module>
                <frontName>myrouter</frontName>
            </args>
        </mymodule>
    </routers>
</admin>

controllers/Adminhtml/TestController.php:

class My_Module_Adminhtml_TestController extends Mage_Adminhtml_Controller_Action
{   
    public function validateAction()
    {
        //validate config settings here
    }
}

EDIT 3:

Event-observer solution works fine, so I created separate question about redirecting to actions:
Redirect to module/controller/action

Best Answer

What exactly is your problem? Your path:

  1. Register an observer, listen to admin_system_config_changed_section_{$section}, /app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php:177
  2. do whatever you want