Разработка классов ядра

 

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

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

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

  • Benchmark
  • Config
  • Controller
  • Exceptions
  • Hooks
  • Input
  • Language
  • Loader
  • Log
  • Output
  • Router
  • URI

Замена классов ядра

Для того, чтобы использовать ваш собственный класс вместо класса ядра просто разместите свой класс в каталоге application/libraries :

  1. application/libraries/some-class.php

Если данный каталог не существует, создайте его.

Любой файл с именем, совпадающим с именем системного класса, представленном в списке выше будет использоваться вместо системного. Обратите внимание на префикс CI перед именем класса. К примеру, если вам нужно переопределить класс Input, то имя файла должно быть Input.php, а класс будет иметь следующий вид:

  1. class CI_Input {
  2.  
  3. }

Наследование и дополнение классов ядра

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

  • В объявлении класса должно быть указано наследование
  • Имя класса и имя файла должны содержать префикс MY (префикс можно изменить, см. ниже)

К примеру, чтобы дополнить класс Input необходимо создать файл application/libraries/MY_Input.php и объявить в нем класс следующим образом:

  1. class MY_Input extends CI_Input {
  2.  
  3. }

Примечание: Если вам нужно задать собственный код конструктора, убедитесь, что вы вызываете конструктор класса-предка:
  1. class MY_Input extends CI_Input {
  2.  
  3. function My_Input()
  4. {
  5. parent::CI_Input();
  6. }
  7. }

Подсказка: любая функция в вашем классе, которая названа идентично функции класса-предка будет вызвана вместо неё. Это позволяет существенно изменять ядро CodeIgniter.

Если вы наследуете класс Controller, убедитесь что ваши классы-контроллеры объявлены как потомки вашего класса, и конструктор класса-контроллера вызывает конструктор вашего варианта класса Contrller:

  1. class Welcome extends MY_Controller {
  2.  
  3. function Welcome()
  4. {
  5. parent::MY_Controller();
  6. }
  7.  
  8. function index()
  9. {
  10. $this->load->view('welcome_message');
  11. }
  12. }

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

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

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

Обратите внимание на то, что все классы ядра используют префикс CI_, поэтому не используйте его для своих классов.

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

  • Allowed HTML tags: <em> <b> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <h2> <h3> <h4> <table> <tr> <td> <th>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Подробнее о форматировании

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов

Вход в систему

Последние комментарии