Создание классов ядра
Каждый раз, когда запускается CodeIgniter, есть несколько базовых классов, которые инициализируются автоматически, как часть ядра фреймворка. При возможности, вы можете заменить или расширить любой базовый класс.
Большинство пользователей никогда не нуждаются в этом, для других случаев опция замены или расширения все же доступна.
Примечание: Вмешательство в работу базовых классов несет большое количество последствий, поэтому убедитесь в том, что вы точно понимаете что и зачем вы делаете.
Список системных классов
Ниже представлен список базовых системных классов, которые вызываются при каждом запуске CodeIgniter:
- Benchmark
- Config
- Controller
- Exceptions
- Hooks
- Input
- Language
- Loader
- Log
- Output
- Router
- 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 {
function __construct()
{
parent::__construct();
}
}
Примечание: Любые функции в вашем классе должны называться идентично функциям родительского класса для того, чтобы использоваться вместо родных (прием, известный как "перегрузка метода"). Это позволит вам изменить ядро CodeIgniter.
Если вы расширяете класс Controller, убедитесь в том, что вы наследуете родительский класс в конструкторе.
class Welcome extends MY_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view('welcome_message');
}
}
Установка собственного префикса
Для того, чтобы установить собственный префикс подкласса, откройте ваш файл application/config/config.php и найдите этот элемент:
$config['subclass_prefix'] = 'MY_';
Пожалуйста, запомните, что все родные библиотеки CodeIgniter имеют префиксы CI_, поэтому никогда не используйте этот префикс.