it-swarm.com.ru

CodeIgniter HMVC object_to_array () ошибка

HMVC: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads

После загрузки CI и копирования через HMVC я получаю следующую ошибку:

Обнаружено неперехваченное исключение

Тип: Ошибка

Сообщение: вызов неопределенного метода MY_Loader :: _ ci_object_to_array ()

Имя файла: /Users/k1ut2/Sites/nine.dev/application/third_party/MX/Loader.php

Номер строки: 300

Backtrace:

Файл: /Users/k1ut2/Sites/nine.dev/application/controllers/Welcome.php Линия: 23 Функция: вид

Файл: /Users/k1ut2/Sites/nine.dev/index.php Строка: 315 Функция: require_once

22
whisky

Просто добавьте это здесь, поскольку ссылка, предоставленная Clasyk, в настоящее время не работает ...

Короткая версия из этой темы сводится к этому ...

В application/third_party/MX/Loader.php вы можете сделать следующее ...

Под public function view($view, $vars = array(), $return = FALSE) Искать ... (строка 300)

return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));

Замени это

if (method_exists($this, '_ci_object_to_array'))
{
        return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
} else {
        return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars($vars), '_ci_return' => $return));
}

Это результат "небольшого" недокументированного изменения, реализованного разработчиками CI, и это хорошо!

На Wiredesignz есть запрос на получение ответа, поэтому он знает об этом ... 

А пока вы можете реализовать вышеупомянутую «диддл» и вернуться к кодированию :)

83
TimBrownlaw

HMVC не работает с 3.1.3 (текущая версия). Но работает со всеми версиями до 3.1.2. Только что проверил это сам с 3.0.0 и выше.

3
whisky

Я получил решение. Это работает для меня . На линии 300 приложения/third_party/MX/Loader.php

Эта строка генерирует ошибку с CI 3.1.3

return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));

Заменить на эту строку.

return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars($vars), '_ci_return' => $return));
}
2
zaman sandhu

Найдено это Используйте это место в приложении/core/MY_Loader.php

Отсюда https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/pull-requests/17/fix-loaderphp-for-ci-313/diff#comment-30560940

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

/* load the MX_Loader class */
require APPPATH."third_party/MX/Loader.php";

class MY_Loader extends MX_Loader
{
    /** Load a module view **/
    public function view($view, $vars = array(), $return = FALSE)
    {
        list($path, $_view) = Modules::find($view, $this->_module, 'views/');

        if ($path != FALSE)
        {
            $this->_ci_view_paths = array($path => TRUE) + $this->_ci_view_paths;
            $view = $_view;
        }

        return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => ((method_exists($this,'_ci_object_to_array')) ? $this->_ci_object_to_array($vars) : $this->_ci_prepare_view_vars($vars)), '_ci_return' => $return));
    }
}
2
Mr. ED

Добавьте эти строки в application/third_party/MX/Loader.php после строки 307, 

protected function _ci_object_to_array($object) 
	{
    return is_object($object) ? get_object_vars($object) : $object;
    }

Однако для 3.1.3 HMVC не работает.

удачи.

1
Ganga