Разработка классов ядра
- Автор mityok on июля 1st, 2008
При каждом запуске CodeIgniter происходит инициализация несколько системных классов которые являются частью ядра фреймворка. В то же время, существует возможность заменить или дополнить системные классы собственными.
Большинству пользователей вряд ли понадобиться использовать данную возможность, но она предоставляется для тех, кому нужно значительно изменить ядро CodeIgniter
Работа с классами ядра системы имеет множество нюансов, поэтому нужно отчётливо понимать, что именно вы делаете.
Список системных классов:
Ниже представлен список классов, которые используются при каждом запуске CodeIgniter:
- Benchmark
- Config
- Controller
- Exceptions
- Hooks
- Input
- Language
- Loader
- Log
- Output
- Router
- URI
Замена классов ядра
Для того, чтобы использовать ваш собственный класс вместо класса ядра просто разместите свой класс в каталоге application/libraries :
application/libraries/some-class.php
Если данный каталог не существует, создайте его.
Любой файл с именем, совпадающим с именем системного класса, представленном в списке выше будет использоваться вместо системного. Обратите внимание на префикс CI перед именем класса. К примеру, если вам нужно переопределить класс Input, то имя файла должно быть Input.php, а класс будет иметь следующий вид:
class CI_Input { }
Наследование и дополнение классов ядра
Если все, что вам необходимо - добавить функциональность, возможно пару дополнительных методов, не имеет смысла полностью заменять системный класс. В данном случае лучше будет наследовать его. Наследование системного класса аналогично замене с небольшими отличиями:
- В объявлении класса должно быть указано наследование
- Имя класса и имя файла должны содержать префикс MY (префикс можно изменить, см. ниже)
К примеру, чтобы дополнить класс Input необходимо создать файл application/libraries/MY_Input.php и объявить в нем класс следующим образом:
class MY_Input extends CI_Input { }
Примечание: Если вам нужно задать собственный код конструктора, убедитесь, что вы вызываете конструктор класса-предка:
class MY_Input extends CI_Input { function My_Input() { parent::CI_Input(); } }
Подсказка: любая функция в вашем классе, которая названа идентично функции класса-предка будет вызвана вместо неё. Это позволяет существенно изменять ядро CodeIgniter.
Если вы наследуете класс Controller, убедитесь что ваши классы-контроллеры объявлены как потомки вашего класса, и конструктор класса-контроллера вызывает конструктор вашего варианта класса Contrller:
class Welcome extends MY_Controller { function Welcome() { parent::MY_Controller(); } function index() { $this->load->view('welcome_message'); } }
Установка собственного варианта префикса
Чтобы задать собственный вариант префикса, откройте файл application/config/config.php и измените строку:
$config['subclass_prefix'] = 'MY_';
Обратите внимание на то, что все классы ядра используют префикс CI_, поэтому не используйте его для своих классов.

Отправить комментарий