В настоящее время я разрабатываю расширения OpenCart. Я просматриваю существующие расширения, чтобы понять архитектуру (и знакомлюсь с концепциями MVC / PHPOO).
Часто появляется эта строка кода:
$ seller_email = $ this-> config-> get (‘service_seller_email’);
Моя интерпретация основана на чтении этот нить:
Я понимаю, что это присваивание переменной, где она обращается к модели (?) С именем config
чтобы получить строку с именем service_seller_email
из портала настроек администратора. Тем не менее, я попытался перемещаться по различным папкам MVC в OpenCart, и я не мог найти конкретный config.php
, Не могли бы вы исправить мою интерпретацию, если она ошибочна?
РЕДАКТИРОВАТЬ: чтобы добавить к путанице, статья, которую я связал, указывает, что вам нужно load
config
в контроллере перед его использованием, например $this->language->load('product/search');
, но я не могу найти такую строку, как $this->config->load('...');
или т.п.
Ваша интерпретация неверна. конфиг класс не рассматривается как модель (несмотря на то, что он обращается к БД напрямую), а как системная библиотека класс — вот почему вы можете найти его в system/library/
папка.
OpenCart имеет свою реализацию сервисный локатор (Реестр) который используется для хранить объект конфигурации, так что вы можете получить к нему доступ из любого места (конечно, внутри OpenCart).
Загружается в оба index.php
файлы (в корне и ниже admin/
) как это:
$config = new Config();
$registry->set('config', $config);
это $registry
это наш сервисный локатор, и он передается любому контроллеру в его __construct()
метод. У каждого контроллера есть и магический метод __get()
который отвечает за извлечение объектов из этого $registry
взглянуть на абстрактный класс Controller в 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
таблица и объект конфигурации пытается найти его и получить его значение (вы можете посмотреть, как это работает в 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);
}