代码点火器第三方,$this->;负载->;add_package_path工作不正常


Code igniter third party, $this->load->add_package_path not working correctly

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

然而,我一直得到

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

我已追踪到此问题,当我致电
$this->load->add_package_path(APPPATH.'third_party/socialize/');

在loader类中,如果我执行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 :(

所以,

这里发生了什么事,我该怎么办?

我昨天在CI v2.0.2代码库中发现了一个错误。从本质上讲,您正在添加一个额外的路径来检查中的文件(这是正确的),加载方法在每个路径中循环,直到找到您要查找的文件。

如果您输出CI对象,您可能会看到您要查找的内容已经存在,但它仍然失败。

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

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