【问题标题】:Code igniter third party, $this->load->add_package_path not working correctlyCodeigniter 第三方,$this->load->add 包路径无法正常工作
【发布时间】:2011-05-30 01:36:16
【问题描述】:

我正在尝试使用elliothaughins Socialize system 作为代码点火器,

但是我一直在得到

消息:include(application/third_party/config/socializenetworks.php):打开流失败:没有这样的文件或目录

我已经追踪了这个问题,当我打电话时
$this->load->add_package_path(APPPATH.'third_party/socialize/');

在加载器类中,如果我执行die($path),我只会得到application/third_party

这似乎很奇怪,因为控制器的代码是

class SocializeController extends CI_Controller {

  function __construct(){
    parent::__construct();
    parse_str($_SERVER['QUERY_STRING'], $_GET);
    $this->load->add_package_path(APPPATH.'third_party/socialize/');
    $this->_autoload();
  }

  private function _autoload(){
    $this->load->model('socialize_migration_model');
    $autoload = array();

    include(APPPATH.'third_party/socialize/config/autoload'.EXT);
    foreach ( $autoload as $type => $files ) {
      $type = ($type == 'libraries') ? 'library' : $type;

      foreach ( $files as $file ){
        $this->load->$type($file);
      }
    }
  }

  public function data($key, $value)
  {
    $this->load->vars(array($key => $value));
  }
}

你可以看到它正在调用一个模型,它成功加载, 当它到达自动加载器时,它会加载中断的库,

给出问题的特定库开始像

class SocializeNetworks {

  private $_obj;
  private $_networks = array();

  function __construct(){
    $this->_obj =& get_instance();
    $this->_obj->load->config('socializenetworks'); // this is the line we die on :(

所以,

这是怎么回事,我该如何解决?

【问题讨论】:

  • 它试图包含位于application/third_party/config/ 的文件,但您的第三方模块似乎位于APPPATH.'third_party/socialize/。你有一个现有的application/third_party/config/ 文件夹吗?里面有什么?
  • 这肯定是一个错误,第三方文件夹的想法是你可以在一个文件夹中部署一整套、库、帮助程序、模型、配置文件、视图,如果你必须采取您的该文件夹的配置文件 otu 它破坏了目的...

标签: php codeigniter loader


【解决方案1】:

我将其追溯到昨天 CI v2.0.2 代码库中的一个错误。基本上发生的事情是您正在添加一个额外的路径来检查文件(这是正确的),并且 load 方法循环遍历每个路径,直到找到您正在寻找的文件。

如果你输出你的 CI 对象,你可能会看到你正在寻找的东西在那里,但它仍然失败。

在文件 /codeigniter/core/Config.php 中,由于某种原因,加载方法所在的 $found=false;不会在通过路径循环的每次迭代中重置,因此如果在第一次运行时找到路径(就像在我的情况下一样),则 $found 设置为 true,但在随后的运行中,$found 仍然为 true,所以它会尝试包含一个不存在的文件。

我通过将 $found 变量的声明移动到第一个 foreach 循环开始的下方来解决了这个问题。这样它每次都会重置它。我报告了这个错误,所以希望它会在后续版本中得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2016-03-20
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多