Ръководство за потребителя на CodeIgniter за създаване на библиотеки
Когато използваме термина "библиотеки", обикновено имаме предвид класовете, намиращи се в директорията на библиотеките и описани в справочника за класове на това ръководство. Но засега ще ви покажем как можете да създадете свои собствени библиотеки в директорията за приложения/библиотеки, като разделите локалните и глобалните рамкови ресурси.
Като допълнителен бонус, CodeIgniter позволява на вашите библиотеки да разширяват родните класове, ако просто искате да добавите някаква функционалност към съществуваща библиотека. Можете също така да замените собствените библиотеки, като просто поставите нови с подобни имена в директорията за приложения/библиотеки.
- Можете да създавате напълно нови библиотеки;
- Можете да разширите родните библиотеки;
- Можете да замените родните библиотеки.
По-долу ще разгледаме тези три концепции.
Забележка: DB класът не може да бъде разширен или заменен от ваши собствени класове. Всички други класове могат да бъдат заменени или разширени.
Вашите библиотечни класове трябва да са в директорията application/libraries, тъй като там CodeIgniter ще ги търси, за да ги инициализира.
Конвенция за именуване
- Имената на класовете трябва да бъдат изписани с главни букви. Например: Myclass.php
- Декларациите на класа трябва да започват с главна буква. Например: клас Myclass
- Имената на класа и файла трябва да съвпадат.
клас файл
Класовете трябва да отговарят на този прототип (използваме името Someclass само за пример):
Използване на вашия клас
Във всяка от функциите на вашия контролер можете да инициализирате класа, като използвате стандарта:
Където someclass е името на файла, без разширение".php". Можете да подадете името на файла с главни или малки букви, няма значение.
Зареденият клас е достъпен чрез името, изписано с малки букви:
$това-> 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->зареждане->помощник('url'); $CI->зареждане->библиотека('сесия'); $CI->config->item('base_url'); и т.н.
Забележка: Не забравяйте, че get_instance() трябва да се предава по препратка:
Много е важно! Предаването по препратка ви позволява да използвате оригиналния обект на CodeIgniter, вместо да правите негово копие.
Подмяна на собствените библиотеки с вашите версии
Просто наименувайте класа си идентичен с родната библиотека и той ще бъде използван вместо него. За да направите това, трябва да наименувате файла и декларацията на клас точно както бихте направили в родната библиотека. Например, за да замените основната имейл библиотека, създайте файл application/libraries/Email.php и декларирайте клас в него:
Имайте предвид, че повечето естествени имена на класове започват с CI_.
За да заредите вашата библиотека, използвайте стандартната функция за зареждане:
Забележка: Понастоящем DB класовете не могат да бъдат заменени от вашите версии.
Разширяване на родни библиотеки
Ако всичко, което искате, е да добавите някаква функционалност към съществуваща библиотека, да добавите функция или две, тогава е излишно да замените цялата библиотека с ваша собствена версия. В този случай ще бъде достатъчно просто да разширите класа. Разширението на класа е почти идентично с заместването, с няколко изключения:
- Декларацията на класа трябва да разшири родителския клас.
- Новото име на клас и име на файл трябва да започва с MY_ (този елемент може да се конфигурира, вижте по-долу).
Например, за да разширите родния имейл клас, създайте файл, наречен application/libraries/MY_Email.php и декларирайте своя клас в него:
клас MY_Email разширява CI_Email
Забележка: акоимате нужда от конструктор, уверете се, че той разширява родителския конструктор:
клас MY_Email разширява CI_Email
публична функция __construct() родител::__construct(); > >
Зареждане на вашите подкласове
За да заредите вашия подклас, използвайте нормалния синтаксис. Не включвайте префикс. Например, за да заредите примера по-горе, който разширява имейл класа, ще използвате:
След като се зареди, ще използвате променливата на класа, както обикновено. В случай на имейл клас, всички повиквания ще използват:
$това-> имейл ->some_function();
Задаване на ваш собствен префикс
За да зададете свой собствен префикс на подклас, отворете вашия файл application/config/config.php и намерете:
Моля, обърнете внимание, че всички собствени библиотеки на CodeIgniter започват с префикса CI_, така че не използвайте този префикс.