Расширить контроллер Codeigniter

0

Я установил Codeigniter в IIS. Все идет отлично.

Я пытаюсь расширить класс CI_Controller. Причина, по которой я делаю это, - установить проверку безопасности в конструкторе. Некоторые контроллеры расширят CI_Controller. Некоторые контроллеры, которые должны быть защищены, будут расширять MY_Controller. Это похоже на хороший подход ко мне.

До сих пор я следовал этим инструкциям:

Создание основных классов

Но когда я вызываю страницу, которая расширяет MY_Controller, я получаю пустую страницу. Проверьте вкладку сети в Firebug, я вижу "500 внутренних ошибок сервера". Я проверяю мои журналы CI, я вижу это:

DEBUG - 2014-11-24 10:26:47 --> Config Class Initialized
DEBUG - 2014-11-24 10:26:47 --> Hooks Class Initialized
DEBUG - 2014-11-24 10:26:47 --> Utf8 Class Initialized
DEBUG - 2014-11-24 10:26:47 --> UTF-8 Support Enabled
DEBUG - 2014-11-24 10:26:47 --> URI Class Initialized
DEBUG - 2014-11-24 10:26:47 --> Router Class Initialized
DEBUG - 2014-11-24 10:26:47 --> Output Class Initialized
DEBUG - 2014-11-24 10:26:47 --> Security Class Initialized
DEBUG - 2014-11-24 10:26:47 --> Input Class Initialized
DEBUG - 2014-11-24 10:26:47 --> Global POST and COOKIE data sanitized
DEBUG - 2014-11-24 10:26:47 --> Language Class Initialized

Теперь, для нормальной точки отсчета, когда я загружаю любой контроллер, который не расширяет MY_Controller, я вижу следующее:

DEBUG - 2014-11-24 11:00:14 --> Config Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Hooks Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Utf8 Class Initialized
DEBUG - 2014-11-24 11:00:14 --> UTF-8 Support Enabled
DEBUG - 2014-11-24 11:00:14 --> URI Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Router Class Initialized
DEBUG - 2014-11-24 11:00:14 --> No URI present. Default controller set.
DEBUG - 2014-11-24 11:00:14 --> Output Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Security Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Input Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Global POST and COOKIE data sanitized
DEBUG - 2014-11-24 11:00:14 --> Language Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Loader Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Helper loaded: url_helper
DEBUG - 2014-11-24 11:00:14 --> Session Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Helper loaded: string_helper
DEBUG - 2014-11-24 11:00:14 --> Session routines successfully run
DEBUG - 2014-11-24 11:00:14 --> Controller Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Database Driver Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Model Class Initialized
DEBUG - 2014-11-24 11:00:14 --> Model Class Initialized
DEBUG - 2014-11-24 11:00:14 --> File loaded: application/views/user/session_box.php
DEBUG - 2014-11-24 11:00:14 --> File loaded: application/views/public/public_menu.php
DEBUG - 2014-11-24 11:00:14 --> File loaded: application/views/public/welcome_message.php
DEBUG - 2014-11-24 11:00:14 --> File loaded: application/views/template.php
DEBUG - 2014-11-24 11:00:14 --> Final output sent to browser
DEBUG - 2014-11-24 11:00:14 --> Total execution time: 0.2295

Может ли кто-нибудь сказать мне, что не так?

MY_Controller

class MY_Controller extends CI_Controller{

    private static $instance;

    /**
     * Constructor
     */
        function __construct()
        {
            parent::__construct();
        }

    public static function &get_instance()
    {
        return self::$instance;
    }
}

Контроллер, который расширяет его:

class Project extends MY_Controller{

    public function __construct()
        {
            parent::__construct();
            $this->load->database();        
            $this->load->model('user_model');
        }

    public function index()
    {
            var_dump("hi");
        }


}
  • 0
    Во-первых, все ли работало до того, как вы расширили контроллер? Во-вторых, не могли бы вы показать код для вашего класса MY_Controller и контроллера, который его расширяет ... не все это только верхняя часть. Наконец, точно ли имя файла совпадает с именем класса (с учетом регистра)?
  • 0
    Хорошо, Росс, я добавил свой код
Показать ещё 7 комментариев
Теги:
codeigniter

1 ответ

1
Лучший ответ

Измените свой MY_Controller на:

<?php

class MY_Controller extends CI_Controller
{

    /**
     * Constructor
     */
    public function __construct()
    {
        parent::__construct();
    }

}

Это потому, что $this уже будет содержать экземпляр, поскольку он расширяет CI_Controller

Я не могу быть уверен, что это проблема, но я надеюсь, что это поможет!

  • 0
    Я только что протестировал код, и он не выдает ошибку с private static $instance; или метод ... он все еще не нужен, хотя :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню