Codeigniter - расширение контроллера не работает

Я пытаюсь расширить контроллер своим собственным классом, который расширяет класс CI_Controller по умолчанию. За исключением того, что это не работает.

Пишет, что не может найти мой подкласс. Мой подкласс находится в application/core и называется My_Control_Panel.

Мой класс, который распространяется на мой подкласс:

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

class Developers extends My_Control_Panel
{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('form');
        $this->load->helper('url');
        $this->load->database();

        $this->checkIfLoggedIn();
        $this->checkIfAllowedToViewPage();
}

Мой подкласс:

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

class My_Control_Panel extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
}

Он продолжает говорить, что не может найти мой подкласс, хотя он должен работать.


person DijkeMark    schedule 15.08.2012    source источник


Ответы (3)


вы должны назвать свой файл так: My_Controller.php внутри папки core, а затем ввести свой код, например

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

class My_Control_Panel extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
}

и это правильный способ сделать это в CodeIgniter, а не как упомянуто в первом ответе с включенным.

person Zaher    schedule 15.08.2012
comment
да, но это application/core, о котором мы здесь говорим, а не system/core .. проверьте руководство - person Zaher; 17.08.2012
comment
могу ли я переименовать файл My_Controller.php во что-то вроде My_Form.php? - person bonbon.langes; 29.07.2013
comment
нет, вы не можете, так как это связано с вашими контроллерами, но если вы хотите расширить CI_Form, то да, вы можете назвать его My_Form - person Zaher; 29.07.2013

Если вы хотите, чтобы CI подхватил ваш расширенный класс, вам нужно будет назвать его MY_Controller. Часть MY_ настраивается, а остальные нет.

Часть MY_ происходит от config/config.php:

$config['subclass_prefix'] = 'MY_';
person complex857    schedule 15.08.2012
comment
Да, я пытался изменить его и все такое, но он все равно не смог найти мой подкласс. - person DijkeMark; 15.08.2012
comment
Обычно это заканчивается проблемой нижнего/верхнего регистра, в вашем примере есть My со строчными буквами y. Может быть, это причина. (или может быть в вашей конфигурации есть My_) - person complex857; 15.08.2012
comment
Извините за это, была ошибка копирования. :) В моем коде это MY_ - person DijkeMark; 15.08.2012

Вам нужно будет включить родительский класс (My_Control_Panel) в подкласс (Developers), например:

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

include_once '../path/to/mycontrolpanel.php';

class Developers extends My_Control_Panel
{
    // whatever
}
person Matthew    schedule 15.08.2012
comment
Но это не было упомянуто в руководстве пользователя CodeIgniter. Вы уверены, что это правильный путь? - person DijkeMark; 15.08.2012
comment
У меня это работает, но я все еще сомневаюсь, что это лучший способ. Все равно спасибо. :) - person DijkeMark; 15.08.2012