我目前正在开发OpenCart扩展程序。我正在查看现有的扩展以了解架构(并熟悉MVC / PHPOO概念)。
通常会出现这行代码:
$ seller_email = $ this-> config-> get('service_seller_email');
我的解释基于阅读this主题:
我理解这是一个变量赋值,它正在访问一个名为config
的模型(?),以从管理设置门户中检索名为service_seller_email
的字符串。但是,我尝试浏览OpenCart中的各种MVC文件夹,但找不到特定的config.php
。如果这是错误的,请你纠正我的解释?
编辑:为了引起混淆,我链接的文章指出您在使用它之前需要在控制器中load
config
,例如$this->language->load('product/search');
,但我找不到诸如$this->config->load('...');
之类的行。
答案 0 :(得分:3)
您的解释不正确。 config 类不被视为模型(尽管它直接访问DB)但是作为系统库类 - 这就是为什么你可以在{{ 1}}文件夹。
OpenCart具有service locator (registry)的实现,用于存储配置对象,以便您可以从任何地方直接访问它(当然,在OpenCart内部)。
它加载在system/library/
个文件中(在root和index.php
下),如下所示:
admin/
这个$config = new Config();
$registry->set('config', $config);
是我们的服务定位器,它被传递给它的$registry
方法中的任何控制器。每个控制器还有一个魔术方法__construct()
,它负责从__get()
中检索对象 - 看看每个控制器扩展(并且应该扩展)的$registry
处的抽象Controller类。 / p>
这就是你可以直接自由打电话的原因
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
中的工作原理{1}})。
希望这能澄清你的困惑。
答案 1 :(得分:0)
查看docs,看起来配置值存储在setting
表中。 Config
类本身位于/system/library/config.php
。
答案 2 :(得分:0)
在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);
}