Создание классов системы ядра

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

Большинству пользователей этого никогда не придется делать, но возможность заменить или расширить их есть, для тех кому нужно значительно изменить ядро CodeIgniter.

Примечание

Путаница с системным классом ядра имеет множество импликаций, поэтому сначала убедитесь в том что Вы знаете что делаете.

Список системныйх классов

Список ниже указывает на системный классы ядра, которые вызываются каждый раз при запуске CodeIgniter:

  • Стандарты
  • Конфиг
  • Контроллер
  • Исключения
  • Хуки
  • Ввод
  • Язык
  • Загрузчик
  • Журнал
  • Вывод
  • Маршрутизатор
  • Безопасность
  • URI
  • Utf8

Замена системных классов

Для использования собственных системных классов вместо стандартных, достаточно просто поместить свою версию класса в application/core/ папку:

application/core/some_class.php

Если такой папки нет, то создайте ее.

Любой файл с идентичным именем из списка выше будет использован вместо стандартного.

Учтите, ваш класс должен иметь CI префикс. Например, если ваш файл называется Input.php класс должен быть назван так:

class CI_Input {

}

Расширение системных классов

Если все что нужно это просто добавить больше функциональности в существующую библиотеку - возможно добавить метод или два - чем заменять существующие библиотеки на свои собственные. Лучше в этом случае просто расширить класс. Расширение класса идентично к замене класса с парой исключений:

  • Объявление класса должно расширять родительский класс.
  • Имя нового класса и файла должны быть с префиксом MY_ (этот пункт настраивается. См. ниже.).

Например, чтобы расширить родной класс Input, создайте файл с именем application/core/MY_Input.php, и объявите класс:

class MY_Input extends CI_Input {

}

Примечание

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

class MY_Input extends CI_Input {

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

Подсказка: Любая функция Вашего класса с именем идентичным методу родного класса будет использована вместо родного (это известно как “анулирующий метод”). Это позволяет в значительной степени изменить ядро CodeIgniter.

Если расширяете класс ядра контроллера, убедитесь что расширяете в новом классе приложения конструкторы контроллера.

class Welcome extends MY_Controller {

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

	public function index()
	{
		$this->load->view('welcome_message');
	}
}

Установка собственного префикса

Чтобы установить свой префикс, откройте application/config/config.php файл и найдите там следующие пункты:

$config['subclass_prefix'] = 'MY_';

Обратите внимание, что все родные библиотеки CodeIgniter имеют префикс CI_ поэтому НЕ ИСПОЛЬЗУЙТЕ его как свой префикс.