Magento 2: प्रोग्रामेटिक रूप से `core_config_data` का मान जोड़ें


24

क्या Magento 2 में एक उच्च स्तरीय अमूर्तता है जो अंत-उपयोगकर्ता-प्रोग्रामर को core_config_dataतालिका में कॉन्फ़िगरेशन मान अपडेट करने की अनुमति देता है ? या सीधे SQL का उपयोग केवल Magento 2 में ऐसा करने का है?

Magento 1 में यानी, आप ऐसा कुछ कर सकते हैं

$config_model = new Mage_Core_Model_Config();
$config_model->saveConfig('my/config/path', $unique_id, 'default', 0);

और विन्यास मूल्यों को बचाने के लिए core_config_data। क्या Magento 2 में एक बराबर है?

जवाबों:


21

+1 उपयोगी, धन्यवाद! मैं यह देखने के लिए कुछ समय के लिए प्रश्न को खुला छोड़ता हूं कि क्या कोई @apiचिह्नित उत्तर शीर्ष पर बुलबुला है।
एलन स्टॉर्म

18

मैं किसी मॉडल या संसाधन मॉडल का उपयोग नहीं करूंगा, लेकिन \Magento\Framework\App\Config\Storage\WriterInterfaceया \Magento\Framework\App\Config\ConfigResource\ConfigInterface(दूसरे के लिए पहला प्रतिनिधि)।

बहुत सीधे आगे, भी:

use Magento\Framework\App\Config\Storage\WriterInterface;

class SomeClass {

    public function __construct(WriterInterface $configWriter)
    {
        $configWriter->save('some/config/path', 'some value');
    }
}

धन्यवाद! मुझे लगता है कि यह बेहतर दृष्टिकोण / उच्च स्तरीय अमूर्तता है जिसका हमें उपयोग करना चाहिए। क्योंकि \Magento\Framework\App\Config\Storage\WriterInterfaceलागू किया जाता है \Magento\Framework\App\Config\Storage\Writerजिसके द्वारा बदले में उपयोग करता है \Magento\Config\Model\ResourceModel\Config
आंद्रेई

4

आप भी इस्तेमाल कर सकते हैं \Magento\Config\Model\Config::save। एक साधारण नमूने के नीचे:

$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();

यह वाक्यविन्यास "सरल" नहीं है, लेकिन यह कुछ मामलों के लिए अधिक सुरक्षित है। तर्क को बचाने के लिए, कार्रवाई db तक सीधी पहुंच से धीमी हो सकती है।

मेरे मामले में, $valueएन्क्रिप्ट किए जाने की आवश्यकता है। में system.xml, मैं क्षेत्र के लिए बैकएंड मॉडल सेट करता हूं, और सहेजें तर्क डेटा को एन्क्रिप्ट करता है।

संपादित करें: \Magento\Config\Model\Config::setDataByPathउपयोग करने के लिए और अधिक सरल


4

एक उच्च स्तरीय अमूर्तता के लिए, मैं Magento\Framework\App\Config\Storage\WriterInterfaceडेटा सेटअप स्क्रिप्ट के निर्माता में इंजेक्ट करूँगा :

use Magento\Framework\App\Config\Storage\WriterInterface; 

public function __construct(WriterInterface $configWriter) {...}

फिर save()विधि का उपयोग करें , उदाहरण के लिए:

$website = $this->websiteRepository->get('main_website'); // inject Magento\Store\Model\WebsiteRepository;

$this->configWriter->save('general/country/default', 'US', ScopeInterface::SCOPE_WEBSITES, $website->getId()); // inject Magento\Store\Model\ScopeInterface;

नोट्स: स्कल्प्स के बहुवचन रूप का उपयोग करें: वेबसाइट / स्टोर Magento\Store\Model\ScopeInterface


0

यहां मैगेंटो 2 कॉन्फ़िगरेशन को प्रोग्रामिक रूप से संभालने के लिए एक पूरा नमूना।

मेरे मामले में, मैं कैश को भी साफ़ करता हूं, स्टोर> कॉन्फ़िगरेशन में अन्य परिवर्तन नहीं दिखाई देते हैं

/**
 * @var \Magento\Config\Model\ResourceModel\Config
 */
protected $resourceConfig;

/**
 * @var \Magento\Framework\App\Cache\TypeListInterface
 */
protected $cacheTypeList;

public function __construct(
    \Magento\Config\Model\ResourceModel\Config $resourceConfig,
    \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
) {
    $this->resourceConfig = $resourceConfig;
    $this->cacheTypeList = $cacheTypeList;
}

public function process()
{
    $this->resourceConfig->saveConfig(
        'my/config/path',
        $unique_id,
        \Magento\Framework\App\ScopeInterface::SCOPE_DEFAULT,
        0
    );
     $this->cacheTypeList->cleanType(\Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.