代码点火器第三方,$ this-> load-> add_package_path无法正常工作

Hai*_*ood 5 php codeigniter loader

我正在尝试使用elliothaughins Socialize系统进行代码点火,

但是我不断

消息: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));
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它正在调用一个模型,并成功加载了模型,即当它到达自动加载器时,在该加载器中它损坏的地方加载了库,

发出问题的特定库开始像

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 :(
Run Code Online (Sandbox Code Playgroud)

所以,

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

小智 5

我昨天在CI v2.0.2代码库中找到了一个错误。从本质上讲,正在发生的事情是您添加了一条附加路径来检查文件(正确),并且load方法循环遍历每个路径,直到找到您要查找的文件为止。

如果输出CI对象,则可能会发现您正在寻找的对象在那里,但是仍然失败。

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

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