ฉันจะตั้งค่าการกำหนดค่าใน Magento 2 ได้อย่างไร


12

ก่อนหน้านี้ (ใน Magento 1 นั่นคือ) เราได้สร้างโมดูลที่ชื่อว่า Setup ซึ่งมีการตั้งค่าสำหรับไซต์ สคริปต์อัปเกรดมีลักษณะดังนี้:

$installer = $this;
$installer->startSetup();
$installer->setConfigData("fastsimpleimport/general/partial_indexing", 1);
$installer->setConfigData("fastsimpleimport/product/disable_preprocess_images", 1);
$installer->setConfigData('general/country/default', 'GB');
$installer->setConfigData('general/locale/firstday', 1); 
$installer->setConfigData('general/locale/timezone', 'Europe/London');
$installer->setConfigData('general/store_information/merchant_country', 'GB');
$installer->setConfigData('design/header/welcome', 'Enter your value');
$installer->setConfigData('design/head/title_suffix', 'Enter your value');
$installer->setConfigData('currency/options/base', 'GBP');
$installer->setConfigData('currency/options/default', 'GBP');
// ...

ฉันคิดไม่ออกว่าจะทำอย่างไรใน M2

กล่าวอีกนัยหนึ่ง: ฉันจะไปเกี่ยวกับการตั้งค่าข้อมูลการกำหนดค่าใน M2 ได้อย่างไร


2
ทำไมคุณต้องการสิ่งเหล่านี้ในฐานข้อมูล? คุณเพิ่มมันในconfig.xmlไฟล์ไม่ได้เหรอ?
Marius

นั่นเป็นเพียงวิธีการทำสิ่งต่าง ๆ ดูเหมือนว่าจะเป็นวิธีการจัดการการตั้งค่าทั่วไปในส่วนขยายโมดูล (อย่างน้อยใน M1) นอกจากนี้ยังต้องมีการจัดการตามเวอร์ชันเพื่อให้สามารถโยกย้ายได้เมื่อโมดูลของเราได้รับการอัพเกรด
Martin Wickman

คำตอบ:


15

ดูเหมือนว่าจะใช้งานได้:

class InstallData implements InstallDataInterface 
{
    public function __construct(
        LoggerInterface $loggerInterface,
        \Magento\Framework\App\Config\ConfigResource\ConfigInterface  $resourceConfig)
    {
        $this->logger = $loggerInterface;
        $this->resourceConfig = $resourceConfig;
    }        

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $this->resourceConfig->saveConfig(
            'a/b/c', 
            'value', 
            \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT, 
            \Magento\Store\Model\Store::DEFAULT_STORE_ID
        );

        $setup->endSetup();
    }   
}

1
ฉันคิดว่าอาจใช้งานได้ (และสะอาดกว่า) เพื่อใช้ส่วนต่อประสานจาก DI ในตัวสร้างสำหรับวัตถุ $ resourceConfig เช่นนี้:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
HervéGuétin

สวัสดีมาร์ตินคุณสามารถแบ่งปันโมดุลของคุณอีกได้ไหม? ฉันกำลังดิ้นรนในสิ่งที่ namespace ฯลฯ ฉันต้องใช้?!
Klettseb

ทำไมคุณถึงเพิ่มคนตัดไม้ด้วย แค่เป็นนิสัยหรือ?
OZZIE

6

สามารถใช้อินเตอร์เฟสต่อไปนี้\Magento\Framework\App\Config\Storage\WriterInterfaceได้มี 2 วิธี:

  • save($path, $value, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeId = 0)
  • delete($path, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeId = 0)

เป็นระดับสูงกว่าเมื่อเทียบกับ\Magento\Config\Model\ResourceModel\Configและควรใช้จากรหัสลูกค้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.