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

时间:2011-05-30 01:36:17

标签: php codeigniter loader

我正在尝试使用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 :(

所以,

这里发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:4)

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

如果您输出CI对象,您可能会看到您正在寻找的内容,但它仍然失败。

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

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