Creating Libraries CodeIgniter User Guide
Коли ми використовуємо термін «бібліотеки», ми зазвичай маємо на увазі класи, що знаходяться в директорії libraries і описані в Довідці за класами цього посібника. Але зараз ми розповімо, як ви можете створювати власні бібліотеки в директорії application/libraries , розділяючи локальні ресурси і глобальні ресурси фреймворку.
Як додатковий бонус CodeIgniter дозволяє вашим бібліотекам розширювати рідні класи, якщо ви просто хочете додати якусь функціональність до існуючої бібліотеки. Також ви можете замінити рідні бібліотеки, просто поклавши нові з аналогічними іменами до директорії application/libraries .
- Ви можете створювати нові бібліотеки;
- Ви маєте можливість розширювати рідні бібліотеки;
- Ви можете замінювати рідні бібліотеки.
Нижче ми детально розкриємо ці три концепції.
Примітка: Клас БД не може бути розширений або замінений вашими власними класами. Усі інші класи можуть бути замінені чи розширені.
Класи ваших бібліотек повинні знаходитися в директорії application/libraries , оскільки саме там CodeIgniter шукатиме їх, щоб ініціалізувати.
Угода про іменування
- Імена класів мають бути написані з великої літери. Наприклад: Myclass.php
- Декларації класів мають починатися з великої літери. Наприклад: class Myclass
- Імена класів та файлів повинні збігатися.
Файл класу
Класи повинні відповідати цьому прототипу (ми використовуємо ім'я Someclass просто для прикладу):
Використання вашого класу
У будь-якій з ваших функцій контролерів ви можете ініціалізувати клас за допомогою стандартного:
Де someclass - це ім'я файлу, без розширення".php". Ви можете передати ім'я файлу з великої літери або маленької, це не має значення.
Завантажений клас доступний при використанні імені, написаного маленькими літерами:
$this-> someclass ->some_function(); // Інстанції об'єктів пишуться завжди з маленької літери
Передача параметрів під час ініціалізації вашого класу
У функцію, яка завантажує бібліотеку, ви можете передати дані масивом у другому параметрі, і вони будуть передані конструктору класу:
$params = array('type' => 'large', 'color' => 'red');
Якщо ви використовуєте цю опцію, ви повинні зробити так, щоб конструктор чекав на дані:
Ви також можете передавати параметри, які зберігаються у конфігураційному файлі. Просто створіть конфігураційний файл з ім'ям, ідентичним імені класу, і збережіть його у вашій директорії application/config/ . Пам'ятайте, що якщо ви передаєте параметри динамічно, як описано вище, файл конфігурації не буде використаний.
Використання ресурсів CodeIgniter у вашій бібліотеці
Щоб отримати доступ до рідних ресурсів CodeIgniter з бібліотеки, використовуйте функцію get_instance() . Ця функція повертає супероб'єкт CodeIgniter.
Зазвичай із функцій вашого контролера ви можете викликати будь-яку функцію CodeIgniter, використовуючи конструкцію $this :
$this ->load->helper('url');$this ->load->library('session');$this ->config->item('base_url'); і т.д.
$this , однак, працює тільки у контролерах, моделях або відображеннях. Якщо ви хочете використовувати класи CodeIgniter у власних класах, зробіть як показано нижче:
По-перше, надайте супероб'єкт CodeIgniter змінної:
Після того, як ви надали об'єктзмінною, ви можете використовувати її замість $this :
$CI->load->helper('url'); $CI->load->library('session'); $CI->config->item('base_url'); і т.п.
Примітка: Пам'ятайте, що get_instance() слід передавати за посиланням:
Це дуже важливо! Передача за посиланням дозволяє використовувати оригінальний об'єкт CodeIgniter, а не створювати його копію.
Заміна рідних бібліотек вашими версіями
Просто назвіть ваш клас ідентично рідній бібліотеці, і він використовуватиметься замість неї. Щоб зробити це, ви повинні називати файл і декларацію класу точно так, як і в рідній бібліотеці. Наприклад, щоб замінити рідну бібліотеку Email , створіть файл application/libraries/Email.php і оголосіть у ньому клас:
Зверніть увагу, що імена більшості рідних класів починаються з CI_ .
Щоб завантажити бібліотеку, використовуйте стандартну функцію завантаження:
Примітка: В даний час класи БД не можуть бути замінені вашими версіями.
Розширення рідних бібліотек
Якщо все, що вам потрібно, це додати деяку функціональність до існуючої бібліотеки, додати функцію або дві — тоді зайвим замінюватиме цілу бібліотеку своєю версією. У цьому випадку досить просто розширити клас. Розширення класу практично ідентичне заміні, за кількома винятками:
- Декларація класу має розширювати батьківський клас.
- Ім'я нового класу та ім'я файлу повинні починатися з MY_ (цей елемент конфігурується, дивіться нижче).
Наприклад, щоб розширити рідний клас Email , створіть файл, який називається application/libraries/ MY_Email.php , і декларуйте у ньому ваш клас:
class MY_Email extends CI_Email
Примітка: якщовам потрібен конструктор, переконайтеся в тому, що він розширює батьківський конструктор:
class MY_Email extends CI_Email
public function __construct() parent::__construct(); > >
Завантаження ваших підкласів
Для завантаження вашого підкласу використовуйте звичайний синтаксис. Не вмикайте префікс. Наприклад, щоб завантажити приклад вище, який розширює клас Email, ви використовуватимете:
Після завантаження ви будете використовувати змінну класу, як ви зазвичай це робите. У випадку класу Email всі виклики будуть використовувати:
$this-> email ->some_function();
Встановлення вашого власного префікса
Щоб встановити власний префікс підкласів, відкрийте файл application/config/config.php і знайдіть у ньому:
Будь ласка, зверніть увагу, що назва всіх рідних бібліотек CodeIgniter починається з префікса CI_ , тому не використовуйте цей префікс.