配置在OpenCart扩展中的位置


Location of config in an OpenCart extension

我目前正在开发OpenCart扩展。我正在浏览现有的扩展,以了解体系结构(并熟悉MVC/PHPOO概念)。

经常会出现以下代码行:

$seller_email=$this->config->get('service_seller_email');

我基于阅读这个帖子的解释:

据我所知,这是一个变量赋值,它访问一个名为config的模型(?),以从管理设置门户检索一个称为service_seller_email的字符串。但是,我尝试过在OpenCart中浏览各种MVC文件夹,但找不到特定的config.php。如果我的解释是错误的,你能纠正一下吗?

EDIT:更令人困惑的是,我链接的文章指定,在使用控制器(如$this->language->load('product/search');)之前,您需要在控制器中loadconfig,但我找不到$this->config->load('...');等行。

您的解释不正确。config类不被视为模型(尽管它直接访问DB),而是作为系统库类别-这就是为什么您可以在system/library/文件夹下找到它。

OpenCart实现了服务定位器(注册表),用于存储配置对象,以便您可以从任何地方直接访问它(当然是在OpenCart内部)。

它被加载在两个index.php文件中(在根目录和admin/下),如下所示:

$config = new Config();
$registry->set('config', $config);

这个$registry是我们的服务定位器,它被传递给它的__construct()方法中的任何控制器。每个控制器还有一个神奇的方法__get(),它负责从这个$registry中检索对象——看看system/engine/controller.php中的抽象控制器类,每个控制器都扩展(并且应该扩展)它。

这就是为什么你可以自由地直接呼叫

$this->config->get('some_config_key');

第一部分,$this->config将属于__get()方法,将'config'值作为$key传递给下一个调用

return $this->registry->get($key);

由于配置对象在我们的服务定位器中注册在'config'密钥下,因此会检索并返回它,以便我们可以在它上调用get('some_config_key')

现在,some_config_key键存储在setting表的DB中,config对象试图找到它并获取它的值(您可以看看system/library/config.php中的工作原理)。

希望这能澄清你的困惑。

查看文档,配置值似乎存储在setting表中。Config类本身位于/system/library/config.php中。

admin > index.php中,您可以找到

// Config
$config = new Config();
$registry->set('config', $config);

这就是它被初始化的地方。该类位于中

system > library > config.php

system > engine >loader.php:中加载的配置

public function config($config) {
    $this->config->load($config);
}