Magento - Error Saving Configuration - Array Encrypted.php
Published:
Heads up! This content is more than six months old. Take some time to verify everything still works as expected.
An error occurred while saving this configuration:
Warning: preg_match() expects parameter 2 to be string, array given in app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Encrypted.php on line 62
Magento version 1.7.0.2
Found a real winner of a bug today in Magento's core configuration
saving objects. We were able to save any config screen without a
password on it, but nothing with a password. After a couple hours
digging around in app/code/core/Mage/Adminhtml/Model/Config/Data.php
,
I located the issue. In the save function, around line 135ish, it
attempts to get the backend model that will be used to save the
data. Intense logging around showed that after the first non-standard
config field, the backend model to be saved was permanently swapped
to adminhtml/system_config_backend_encrypted
. Why? Bad code. The
issue is that they check if the backend model has been set, and uses
it if it has. Which means future loops never go back to core/config
because it's already set to something on the first pass!
The answer is simple, unset backend class, or fix the faulty if logic.
/** * Get field backend model */ unset( $backendClass ); // Add this line if (isset($fieldConfig->backend_model)) { $backendClass = $fieldConfig->backend_model; } if (!isset($backendClass)) { $backendClass = 'core/config_data'; }