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
Просто добавьте это здесь, поскольку ссылка, предоставленная 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 есть запрос на получение ответа, поэтому он знает об этом …
А пока вы можете реализовать вышеупомянутую «диддл» и вернуться к кодированию 🙂
HMVC не работает с 3.1.3 (текущая версия). Но работает со всеми версиями до 3.1.2. Только что проверил это сам с 3.0.0 и выше.
Найдено это Используйте это место в приложении / core / MY_Loader.php
<?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));
}
}
Я получил решение. Это работает для меня.
На линии 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));
}
Добавьте эти строки в application / third_party / MX / Loader.php после строки 307,
protected function _ci_object_to_array($object)
{
return is_object($object) ? get_object_vars($object) : $object;
}