我目前正在开发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');
)之前,您需要在控制器中load
和config
,但我找不到$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);
}