31

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

回溯:

文件:/Users/k1ut2/Sites/nine.dev/application/controllers/Welcome.php 行:23 功能:查看

文件:/Users/k1ut2/Sites/nine.dev/index.php 行:315 功能:require_once

4

5 回答 5

111

只需在此处添加此内容,因为 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 上有一个拉取请求等待采取行动,所以他知道这件事......

与此同时,您可以实现上述“diddle”并返回编码:)

于 2017-01-22T03:14:54.867 回答
5

我得到了解决方案。这对我有用。在 application/third_party/MX/Loader.php 的第 300 行

此行使用 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));
}
于 2018-03-31T11:06:58.100 回答
4

找到这个 在 application/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));
    }
}
于 2017-07-02T07:46:41.077 回答
3

HMVC 不适用于 3.1.3(当前版本)。但适用于最高 3.1.2 的所有版本。刚刚从 3.0.0 开始自己测试了这个。

于 2017-01-09T23:07:58.600 回答
1

在 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 不起作用。

更好的运气。

于 2017-03-10T05:49:08.657 回答