Magento 2 a-t-il une abstraction de haut niveau qui permet aux programmeurs utilisateurs finaux de mettre à jour les valeurs de configuration dans le core_config_data
tableau? Ou est-ce que l'utilisation de SQL simple est le seul moyen de le faire dans Magento 2?
c'est à dire dans Magento 1, vous pouvez faire quelque chose comme ça
$config_model = new Mage_Core_Model_Config();
$config_model->saveConfig('my/config/path', $unique_id, 'default', 0);
et enregistrer les valeurs de configuration dans core_config_data
. Y a-t-il un équivalent dans Magento 2?
la source
@api
des réponses marquées remontent au sommet.Je n'utiliserais pas un modèle ou un modèle de ressource, mais
\Magento\Framework\App\Config\Storage\WriterInterface
ou\Magento\Framework\App\Config\ConfigResource\ConfigInterface
(la première délégation à la seconde).Assez simple aussi:
la source
\Magento\Framework\App\Config\Storage\WriterInterface
est mis en œuvre par\Magento\Framework\App\Config\Storage\Writer
lequel à son tour utilise\Magento\Config\Model\ResourceModel\Config
.Vous pouvez également utiliser
\Magento\Config\Model\Config::save
. Ci-dessous un simple échantillon:Cette syntaxe n'est pas "simple", mais elle est plus sûre dans certains cas. Du à la logique de sauvegarde, l'action peut être plus lente que l'accès direct à la base de données.
Dans mon cas,
$value
besoin d'être crypté. Danssystem.xml
, j'ai défini le modèle principal pour le champ et la logique de sauvegarde crypte les données.Edit:
\Magento\Config\Model\Config::setDataByPath
plus simple à utiliserla source
Pour une abstraction de haut niveau, j'injecterais
Magento\Framework\App\Config\Storage\WriterInterface
dans le constructeur d'un script de configuration de données:Utilisez ensuite la
save()
méthode, par exemple:Remarques: Utilisez la forme plurielle des étendues: sites Web / magasins dans
Magento\Store\Model\ScopeInterface
la source
Voici un exemple complet pour gérer la configuration de Magento 2 par programmation.
Dans mon cas, j'ajoute également pour vider le cache, sinon les modifications n'apparaissent pas dans Store> Config .
la source