1

$ this-> load-> add_package_pathを使用して、CIアプリに新しいサブアプリケーションを追加しようとしています。ビューなどにこれを使用する方法がわかります。

$this->load->add_package_path("/mypackage");

コントローラctorで。残念ながら、パッケージパスからコントローラーを見つけたいので、それは役に立ちません。鶏が先か卵が先かという問題のようです。add_package_path呼び出し(index.phpなど)を配置できる場所は他にありますか?

4

1 に答える 1

0

CIを介してトレースすることでそれを理解しました。あなたはこれを行うことができないことが判明しました。独自のコントローラーを/application/ controllersのサブディレクトリに配置することはできますが、他の場所に配置することはできません。特に、http ://codeigniter.com/user_guide/libraries/loader.htmlが示すように、

これらの要素は、ライブラリ(クラス)ビューファイル、ヘルパー、モデル、または独自のファイルにすることができます。

コントローラを含まない「独自のファイル」。CodeIgniter.phpとRouter.phpに変更を加えることで、APPPATHに加えてENVIRONMENT設定を参照できるようになりました。ただし、このような変更は好きではないので、変更を取り消しました。他の誰かがそれから利益を得ることができる場合に備えて、これをここに置きます。

Router.phpの変更:

function _validate_request($segments)
{
...
  // Does the requested controller exist in the root folder?
  if (file_exists(APPPATH.'controllers/'.$segments[0].'.php')
      || file_exists(ENVIRONMENT.'/controllers/'.$segments[0].'.php')) // New bit here
  {
    return $segments;
  }
....
}

CodeIgniter.phpの変更、'246行目あたり:

if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php'))
{
  // New bit here
  if ( ! file_exists(ENVIRONMENT.'/controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php'))
  {
    show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.');
  }
  include(ENVIRONMENT.'/controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php');
} else {
  include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php');
}
于 2012-08-01T21:54:58.433 に答える