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 回答