Сторонний воспламенитель кода, $ this-> load-> add_package_path не работает правильно - PullRequest
5 голосов
/ 30 мая 2011

Я пытаюсь использовать 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 Ответ

5 голосов
/ 05 июня 2011

Я проследил это до ошибки только вчера в кодовой базе CI v2.0.2. По сути дела, вы добавляете дополнительный путь для проверки наличия файлов (и это правильно), а метод load перебирает все пути, пока не найдет искомый файл.

Если вы выведете свой объект CI, вы, вероятно, увидите, что то, что вы ищете, есть, но оно все еще не работает.

В файле /codeigniter/core/Config.php, где по какой-то причине в качестве метода загрузки используется $ found = false; не сбрасывается на каждой итерации в цикле пути, поэтому, если путь найден при первом запуске (как это было в моем случае), то для $ found устанавливается значение true, но при последующих запусках $ found все еще равно true, поэтому он пытается включить несуществующий файл.

Я решил эту проблему, переместив объявление переменной $ found чуть ниже начала первого цикла foreach. Таким образом, он сбрасывает его каждый раз. Я сообщил об ошибке, так что, надеюсь, она будет исправлена ​​в следующих версиях.

...