Magento (Adobe Commerce) modules often need to keep track of the store configuration when implementing backend logic. This article talks about:
- How configuration values are stored
- How to get configuration values
- How to set configuration values programmatically
- How to specify default values
How are configuration values stored?
Magento (Adobe Commerce) maps a set of configuration paths (e.g., web/secure/base_url
) to their values (e.g., https://localhost/
). This configuration is scope-based, meaning you can define a “base” configuration value for the default scope, then override it for a specific store.
The configuration is stored in the core_config_data
table and easily accessible using a database exploration tool.
In addition to the configuration key and value, the table stores the scope (default/store by id/website by id) and the timestamp when the configuration was last updated.
How to get configuration values?
The \Magento\Framework\App\Config\ScopeConfigInterface
provides functions for retrieving a configuration value.
The getValue
function takes 1 to 3 arguments:
- The configuration value path: e.g.,
general/store_information/name
- The scope:
store
/default
/website
(optional,default
if not specified) - The store/website ID (not required for
default
scope)
➡️ There’s also the isSetFlag
function for boolean configurations
For example, to get the store name of a store with a known ID:
$storeName = $this->scopeConfig->getValue(
Information::XML_PATH_STORE_INFO_NAME,
ScopeInterface::SCOPE_STORE,
$storeId
);
➡️ The path is often taken from a PHP constant, like Information::XML_PATH_STORE_INFO_NAME
. This helps to avoid repetition and typos. It also makes refactoring easier—if the path changes, only one constant needs to change!
How can I set configuration values programmatically?
Often, configuration values are edited in the Magento admin panel. However, you may sometimes wish to edit them programmatically, such as in a migration script or a custom controller.
The \Magento\Framework\App\Config\Storage\WriterInterface
provides functions for setting or clearing a configuration value.
The delete
function is for clearing a config value, and takes 1 to 3 arguments, same as the getValue
function of ScopeConfigInterface
:
- The configuration value path: e.g.,
general/store_information/name
- The scope:
store
/default
/website
(optional,default
if not specified) - The store/website ID (not required for
default
scope)
The save
function sets a config value and takes 2 to 4 arguments. In addition to the 3 arguments of delete
, it requires the value to set the config too. The arguments are:
- The configuration value path: e.g.,
general/store_information/name
- The configuration value to set: e.g.,
Amazing Store
- The scope:
store
/default
/website
(optional,default
if not specified) - The store/website ID (not required for
default
scope)
Example:
$this->configWriter->save(self::CRON_STRING_PATH, join(' ', self::CRON_EXPR_ARRAY));
How to specify default values?
The default value will be used if a configuration value is not specified. You can specify the default values in the etc/config.xml
file.
For example, to specify the default value "{{base_url}}" for web/unsecure/base_url and "{{unsecure_base_url}}
” for web/unsecure/base_web_url
, you would write:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<web>
<unsecure>
<base_url>{{base_url}}</base_url>
<base_web_url>{{unsecure_base_url}}</base_web_url>
</unsecure>
</web>
</default>
</config>
Need help with Magento (Adobe Commerce) development? scandiweb is the most certified Magento team in the world—get your dedicated eCommerce team today or get in touch with one of our experts.
Share on: