对代码点火器控制器使用add_package_path

时间:2012-08-01 13:36:18

标签: codeigniter codeigniter-2

我正在尝试使用$ this-> load-> add_package_path将新的子应用程序添加到我的CI应用中。我可以看到如何将它用于视图等:只需添加

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

在控制器ctor中。不幸的是,这没有用,因为我想从包路径中找到控制器:它看起来像鸡和鸡蛋的问题。是否有其他地方我可以调用add_package_path(例如index.php)?

1 个答案:

答案 0 :(得分:0)

通过跟踪CI来计算出来。事实证明你不能这样做。您可以将自己的控制器放在/ application / controllers的子目录中,但不能将它们放在其他位置:特别是,如http://codeigniter.com/user_guide/libraries/loader.html所暗示的那样,

  

这些元素可以是库(类)查看文件,助手,模型或您自己的文件。

“您自己的文件”不包括控制器。通过对CodeIgniter.php和Router.php进行更改,我最终能够通过APPPATH查看环境设置。但是,我不喜欢做这种改变,所以我退出了改变。我会把这个放在这里以防其他人从中受益。

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');
}