Получить значение из "данных конфигурации ядра"
Я пытаюсь получить значение из таблицы 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
Любая помощь будет очень признательна.
2 answers
Вместо того, чтобы создавать объект Бд напрямую, который не использует функции внедрения зависимостей (DI) Magento, вам следует либо:
-
Используйте 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(); }
Или
-
Создайте его с помощью класса "Фабрика " (если вам нужно более одного экземпляра)
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(); }
Ваш скрипт не работает из-за отсутствия аргумента в конструкторе, когда вы вызываете $new = Db();
, вы должны передать экземпляр \Magento\Framework\App\Config\ScopeConfigInterface
внутри него, например:
$new = Db($scopeConfig);
Где $scopeConfig
экземпляр \Magento\Framework\App\Config\ScopeConfigInterface
Вы можете найти информацию о том, "Как запустить внешний скрипт в Magento 2" здесь