CodeIgniter 2: не загружается класс MY_Loader - PullRequest
4 голосов
/ 27 марта 2011

Я пытался переопределить метод «database» класса загрузчика (CI_Loader).Я следовал инструкциям, приведенным в руководстве пользователя CodeIgniter: Создание библиотек (выделите «Расширение собственных библиотек»).Но класс MY_Loader не загружается автоматически и не используется в вызовах $this->load вместо основного класса Loader CI.Я только создал класс MY_Loader (application / library / MY_Loader.php, как указано в руководстве пользователя).Я что-то упускаю?Я попытался поместить его в config / autoload.php для раздела библиотек этого файла, и он действительно автоматически загружается, но затем я получаю доступ к библиотеке, используя $this->my_loader->database(), и это не идея ...

Я вставляю ниже содержимое приложения / library / MY_Loader.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Loader extends CI_Loader {

    function database($params = '', $return = FALSE, $active_record = NULL)
    {
        echo '---test---';
        exit;
    }
}

Большое спасибо.

Ответы [ 2 ]

10 голосов
/ 27 марта 2011

Класс загрузчика является частью ядра, поэтому он должен идти в "application / core / MY_Loader.php"

Любой класс, который вы хотите расширить, должен находиться в соответствующем каталоге в папке ваших приложений. Вы должны быть в состоянии взять урок, который вы написали, бросить его туда и сделать ... он должен работать. Взлом не требуется.

0 голосов
/ 27 марта 2011

Хорошо, мне удалось заставить его работать, но я не уверен, что это лучший или самый элегантный способ.Сначала я добавил my_loader в application / config / autoload.php в разделе библиотек.Затем я проверил, что $this->load было внутри контроллера, и это был экземпляр CI_Loader, поэтому в конструкторе класса MY_Loader я сделал ссылку на CI и заменил ее свойство load ссылкой на MY_Loader: $CI->load = $this;.

.Последний класс MY_Loader такой:

class MY_Loader extends CI_Loader {

    function __construct() {
        parent::__construct();

        $CI =& get_instance();
        $CI->load = $this;
    }

    function database($params = '', $return = FALSE, $active_record = NULL)
    {
        parent::database($params, $return, $active_record);

        // bootstrap doctrine
        require_once APPPATH . DIRECTORY_SEPARATOR . 'hooks' . DIRECTORY_SEPARATOR . 'doctrine' . EXT;
        bootstrap_doctrine();
    }
}

Пожалуйста, если вы пришли с лучшим / более умным решением, опубликуйте ответ.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...