rodigy

__consruct в модуле или любом другом конроллере

Рекомендуемые сообщения

rodigy    10

Собственно если прописать метод __construct в своем контроллере унаследованном от Controller  то получим ошибку:

 

Fatal error: Call to a member function get() on a non-object in Z:\home\test\www\system\engine\controller.php on line 10

 

 

Задался этим вопросом, когда решить объединить подгрузку ( load->model() ) всех  повторяющихся моделей в разных методах одного класса  в конструктор.

 

То ли я не так ООП понимаю, то ли причина кроется в другом?

 

OpenCart 2.1.0.2
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
snastik    846
ControllerProductCategory extends Controller {

А это вас не смущает ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Dotrox    335
в своем контроллере унаследованном от Controller

А вы каким образом создаёте экземпляр класса вашего контроллера? Сама ошибка говорит о том, что у вас реестр не передан в конструктор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rodigy    10

А вы каким образом создаёте экземпляр класса вашего контроллера? Сама ошибка говорит о том, что у вас реестр не передан в конструктор.

 

Так же как и все остальные уже имеющиеся. Да я это понял, ток вот не могу понять как получить доступ к этому заветному реестру. parent::$registry тоже приводит к ошибке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 017

__construct($registry)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rodigy    10

@chukcha, тоже самое будет, что и в первом посте 

Изменено пользователем rodigy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 017

Покажите что вы делаете?

 

ControllerProductCategory extends Controller {

 

MyController extends ControllerProductCategory {

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Dotrox    335
тоже самое будет, что и первом посте

У вас так должен выглядеть конструктор в вашем классе. А при создании экземпляра должно быть так:

$obj = new myClass($registry);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 017

classMyController extends Controller {


    public function __construct($registry) {
        parent::__construct($registry);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Dotrox    335
parent::__construct($registry);

Видимо, это как раз и причина проблемы (отсутствие и этого и явного присвоения реестра в поле класса).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 017

 

У вас так должен выглядеть конструктор в вашем классе. А при создании экземпляра должно быть так:

$obj = new myClass($registry);

$obj = new myClass($this->registry);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Dotrox    335
$obj = new myClass($this->registry);

Зависит от места расположения этой строчки. Если:

 

 

 

Так же как и все остальные уже имеющиеся.

 

То в 2.1 это index.php, где просто $registry (оно и в следующих версиях просто $registry, но файл уже - framework.php).

Хотя, это касается только контроллеров библиотеки. Я почему-то подумал именно про неё.

Изменено пользователем Dotrox

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rodigy    10
Всем спасибо , сам так решил проблему 
class ControllerTestTest extends Controller {
	protected $registry;

	function __construct ($registry) {
		$this->registry = $registry;
	}
	 public function __get($key) {
		 return $this->registry->get($key);
	}

оказалось что достаточно этого, а я уже в такие дебри залез,  а всего то забыл в вызове родительского конструктора передать  $registry

function __construct ($registry) {
        parent::_construct($registry);
    }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу