Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Создание и доступ к собственной системной библиотеке


amfsota

Recommended Posts

8 минут назад, amfsota сказал:

Как мне посоветовали - так и пробую.

Я не понимаю, почему свойство registry в моделях работает, а из системной библиотеки - нет.

Блин, задача-то вроде простая - подключить класс. А никак не получается.

 

Потому что это "глобальный контейнер", в который собирается набор экземпляров базовых классов, который уже передается в класс controller, из которого происходят все манипуляции контентом. Он как раз и собирается из базовых классов типа cache, url, cart и так далее. И до того пока он не соберется полная коллекция необходимых библиотек - для чего его передавать в системные классы ?

 

 

Надіслати
Поділитися на інших сайтах

32 минуты назад, snastik сказал:

вы бы версию написали....

дык писал в первом ответе вам.

беда какая-то класс загружен - Load не нужно, но всё-равно ошибки в cart.php.

при создании экземпляра класса в строке:

$calculators = new Calculators();
Warning: Missing argument 1 for Calculators::__construct(), called in /var/www/u0328033/public_html/mymetab.ru/system/library/cart.php on line 174 and defined in /var/www/u0328033/public_html/mymetab.ru/system/library/calculators.php on line 5Notice: Undefined variable: registry in /var/www/u0328033/public_html/mymetab.ru/system/library/calculators.php on line 6

опять ругается на отсутствие registry, только уже в конструкторе класса calculators

вот конструктор из calculators.php

    public function __construct($registry) {
        $this->config = $registry->get('config');
        $this->customer = $registry->get('customer');
        $this->session = $registry->get('session');
        $this->db = $registry->get('db');
        $this->tax = $registry->get('tax');
        $this->weight = $registry->get('weight');
    }

 

Надіслати
Поділитися на інших сайтах


Да не видит он из cart.php registry.

$calculators = new Calculators($registry);

получаем ошибку:

Notice: Undefined variable: registry in /var/www/u0328033/public_html/mymetab.ru/system/library/cart.php

Надіслати
Поділитися на інших сайтах


Я не издеваюсь, это надо мной похоже движок издевается.

На конструктор в cart.php не ругается совсем.

Более того на конструктор в calculators.php тоже не ругается, когда создание экземпляра класса идёт из модуля (не важно модуль админки или каталога).

Фигня какая-то творится.

Надіслати
Поділитися на інших сайтах


19 минут назад, amfsota сказал:

Да не видит он из cart.php registry.


$calculators = new Calculators($registry);

И не должен. Откуда у вас там появилось $registry? Вы ведь изначально пробовали с $this->registry и ошибок (в этом месте) не было.

Надіслати
Поділитися на інших сайтах


пока итог такой:

cart.php

в конструкторе $registry виден и все экземпляры классов подгружаются

в функции getProducts() $registry не виден и невозможно подключить ни один класс

Надіслати
Поділитися на інших сайтах


Всё, пока писал предыдущий пост нашёл решение.

Блин, это костыль какой-то получается.

Короче, создаём в конструкторе экземпляр registry из объекта $registry так:

$this->registry = $registry;

а далее создаём свои экземпляры классов так:

$this->calculators = $this->registry->get('calculators');

это работает, слава богу...

может быть кто-нибудь знает как по уму сделать, не хочется пихать в код такое

Надіслати
Поділитися на інших сайтах


1 минуту назад, amfsota сказал:

в конструкторе $registry виден и все экземпляры классов подгружаются

в функции getProducts() $registry не виден и невозможно подключить ни один класс

Вам стоит прочитать про ООП в php!

 

У вас нигде в классе не доступна переменная $registry кроме конструктора, где она является аргументом и значение передаётся при создании экземпляра класса. И её название там значения не имеет, от него ничего не зависит, главное, чтоб оно совпадало с названием в дальнейшем коде.

 

Если вам нужен доступ к реестру внутри getProducts(), то вам нужно передать его в свойство класса. Первые 6 строк в конструкторе - это как раз пример, как это сделать. Только там в свойство передаётся не весь реестр, а его отдельные элементы.

 

 

  • +1 1
Надіслати
Поділитися на інших сайтах


Да зачем пудрить себе мозги, проще вынести другим

Я дважды дал работающий код

 

А у него откуда-то и this и прочее

Надіслати
Поділитися на інших сайтах

Где?

Все ваши посты пересмотрел, нет там нигде работающего решения.

Вся проблема была именно в видимости register, а вы не предложили ничего для её решения.

Всё. тема закрыта.

Спасибо всем участвующим в дискуссии вы очень помогли, хоть и не конкретным решением, но своими ответами натолкнули на нужную мысль.

Надіслати
Поділитися на інших сайтах


Т.е. ни на что вас не натолкнуло

 

да, но дальше нужно было развивать самостоятельно

 

 

Но и это вас не подтолкнуло.

 

Цитата

 — Вы, чего, и конфеты за меня есть будете?
 — Ага!

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.