Получить значение из "данных конфигурации ядра"


Я пытаюсь получить значение из таблицы core_config_data, но когда я следую различным руководствам в Интернете или предыдущим темам здесь, это не работает..

Отказ от ответственности: Я новичок в PHP и Magento в целом, поэтому я не совсем уверен, что делаю..

Класс такой:

class Db
{
    public function __construct(\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig)
    {
        $this->_scopeConfig = $scopeConfig;
    }

    public function getApiKey()
    {
        $getApiKey = $this->_scopeConfig->getValue('vendor_module/general/ApiKey',
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
        return $getApiKey;
    }
}

Когда я пытаюсь создать экземпляр класса, вызвав $new = Db(); $new->getApiKey;, он возвращает следующую ошибку:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function vendor\module\src\Model\Db::__construct(), 0 passed in /xxxxx/src/Model/Db.php on line 23 and exactly 1 expected in /xxxxx/src/Model/Db.php on line 9

Я попытался перезапустить setup:di:compile очищены папки кэша, удалено содержимое magento/generated (У меня нет var/generation в magento 2.2.0..) и все равно ничего.

Ссылки, о которых я знаю: Как получить значение из таблицы `core_config_data` в Magento 2

Https://maxyek.wordpress.com/2015/04/03/building-magento-2-extension-extendedconfig/

Http://magehelper.blogspot.co.uk/2015/06/get-system-config-values-in-magento-2.html

Любая помощь будет очень признательна.

Author: 7ochem, 2017-06-23

2 answers

Вместо того, чтобы создавать объект Бд напрямую, который не использует функции внедрения зависимостей (DI) Magento, вам следует либо:

  1. Используйте DI, чтобы ввести ваш объект Бд непосредственно в __constructor() класса, в котором вы его используете:

    public function __construct(\Path\To\Your\Class\Db $db)
    {
        // now your Db class is instantiated with the 
        // ScopeConfigInterface as expected
        $this->db = $db;
        // use as you will
        $this->db->getApiKey();
    }
    

Или

  1. Создайте его с помощью класса "Фабрика " (если вам нужно более одного экземпляра)

    public function __construct(\Path\To\Your\Class\DbFactory $dbFactory)
    {
        // this "virtual" class dbFactory let's you create Db objects, 
        // populated with your DI objects like ScopeConfigInterface
        $this->dbFactory = $dbFactory;
        // here's how to create a Db object from the Factory
        $db = $this->dbFactory->create();
        // use as you will
        $db->getApiKey();
    }
    
 1
Author: thaddeusmt, 2017-06-23 19:40:18

Ваш скрипт не работает из-за отсутствия аргумента в конструкторе, когда вы вызываете $new = Db();, вы должны передать экземпляр \Magento\Framework\App\Config\ScopeConfigInterface внутри него, например:

$new = Db($scopeConfig);

Где $scopeConfig экземпляр \Magento\Framework\App\Config\ScopeConfigInterface

Вы можете найти информацию о том, "Как запустить внешний скрипт в Magento 2" здесь

 1
Author: Siarhey Uchukhlebau, 2017-06-23 15:45:37