마 젠토 2 : 프로그래밍 방식으로`core_config_data`에 값 추가


24

Magento 2에는 최종 사용자 프로그래머가 core_config_data테이블의 구성 값을 업데이트 할 수있는 고급 추상화 기능이 있습니까? 아니면 Magento 2에서 straight SQL을 사용하는 유일한 방법입니까?

즉, 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표시된 답변이 맨 위로 올라가는 지 확인하기 위해 잠시 동안 질문을 열어 두겠습니다 .
Alan Storm

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
Andrei

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

다음은 Magento 2 구성을 프로그래밍 방식으로 처리하기위한 전체 샘플입니다.

필자의 경우 캐시를 지우려면 추가하십시오. 그렇지 않으면 변경 사항이 Store> Config에 나타나지 않습니다 .

/**
 * @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);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.