Как получить доступ к моей пользовательской модели, расположенной в каталоге, из системной библиотеки cart в opencart 2.3

#opencart #opencart2.x #opencart-3 #opencart-module #opencart2.3

#opencart #opencart2.x #opencart-3 #opencart-модуль #opencart2.3

Вопрос:

Я добавляю этот код путем модификации в системную библиотеку корзины, чтобы получить доступ к моей пользовательской модели, расположенной в каталоге / model / extension / folder_name / file_name:

 public function __construct($registry) {
global $loader;
$loader->model('extension/folder_name/file_name');
$this->model = $registry->get('model_extension_folder_name_file_name');
}
  

Но там написано:
Неустранимая ошибка: неперехваченная ошибка: вызов функции-члена model() с нулевым значением
в opencart 2.3.0.2

Хотя этот код работает нормально, когда я работаю на opencart 2.2.0.0.

Пожалуйста, помогите…

Ответ №1:

вы правильно поняли идею, просто синтаксическая ошибка.

В OpenCart доступ к загрузчику в файле контроллера осуществляется через $this->load->model()

Но в system/library/cart/cart.php ваш код должен выглядеть следующим образом

 public function __construct($registry) {
    $registry->get('load')->model('extension/folder_name/file_name');
    $this->model = $registry->get('model_extension_folder_name_file_name');
}
  

Это потому, что вы получаете доступ непосредственно в system/library/cart/cart.php , где у вас есть доступ к $registry из конструкции, но нет __get() функций __set() , подобных тем, которые есть у контроллеров и моделей.

Самое интересное, что метод $ this-> load-> model на самом деле проверяет, откуда вызывается корзина (из catalog папки или не из admin каталога) и загружается соответствующим образом.

Вы можете безопасно загружать модель в, cart.php потому что она вызывается только в catalog папке, но будьте осторожны, добавляя такой код в system/library/request.php которая загружается как в catalog , так и admin . это приведет к возникновению ошибок.