web-dev-qa-db-ja.com

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

バックトレース:

ファイル:/Users/k1ut2/Sites/nine.dev/application/controllers/Welcome.php行:23機能:view

ファイル:/Users/k1ut2/Sites/nine.dev/index.php行:315機能:require_once

26
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にはアクションを待っているプルリクエストがありますので、彼はそれを知っています...

それまでの間、上記の「ディドル」を実装してコーディングに戻ることができます:)

92
TimBrownlaw

私は解決策を得ました。これは私のために働いています。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));
}
4
Muhammad Zaman

HMVCは3.1.3(現在のバージョン)では動作しません。ただし、3.1.2までのすべてのバージョンで動作します。これを自分自身で3.0.0以降でテストしました。

3
whisky

この場所はapplication/core/MY_Loader.phpで使用してください

ここから https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/pull-requests/17/fix-loaderphp-for-ci-313/diff#comment-3056094

<?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