You can also use \Magento\Config\Model\Config::save
. Below a simple sample:
$configData = [
'section' => 'MY_SECTION',
'website' => null,
'store' => null,
'groups' => [
'MY_GROUP' => [
'fields' => [
'MY_FIELD' => [
'value' => $myValue,
],
],
],
],
];
// $this->configFactory --> \Magento\Config\Model\Config\Factory
/** @var \Magento\Config\Model\Config $configModel */
$configModel = $this->configFactory->create(['data' => $configData]);
$configModel->save();
This syntax is not "simple", but it's more safe for some case. Du to the save logic, the action might be slower than direct access to the db.
In my case, $value
need to be encrypted. In system.xml
, I set the backend model for the field, and the save logic encrypt the data.
Edit: \Magento\Config\Model\Config::setDataByPath
more simple to use