【问题标题】:Use add_package_path for Code Igniter controllers为 Codeigniter 控制器添加包路径
【发布时间】:2012-08-02 05:54:58
【问题描述】:

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

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

在控制器ctor中。不幸的是,这无济于事,因为我想从包路径中找到控制器:这似乎是一个先有鸡还是先有蛋的问题。还有其他地方可以调用 add_package_path 吗(例如 index.php)?

【问题讨论】:

    标签: codeigniter codeigniter-2


    【解决方案1】:

    通过跟踪 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');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多