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
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にはアクションを待っているプルリクエストがありますので、彼はそれを知っています...
それまでの間、上記の「ディドル」を実装してコーディングに戻ることができます:)
私は解決策を得ました。これは私のために働いています。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));
}
HMVCは3.1.3(現在のバージョン)では動作しません。ただし、3.1.2までのすべてのバージョンで動作します。これを自分自身で3.0.0以降でテストしました。
この場所はapplication/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));
}
}
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は機能しません。
幸運を。