Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

CodeIgniter User Guide Version 2.1.0


Создание библиотек

Когда мы используем термин «библиотеки», обычно мы подразумеваем классы, находящиеся в директории libraries и описанные в Справке по классам этого руководства. Но сейчас мы расскажем, как вы можете создавать ваши собственные библиотеки в директории application/libraries, разделяя локальные ресурсы и глобальные ресурсы фреймворка.

Как дополнительный бонус, CodeIgniter разрешает вашим библиотекам расширять родные классы, если вы просто хотите добавить какую-то функциональность в существующую библиотеку. Также вы можете заменить родные библиотеки, просто положив новые с аналогичными именами в директорию application/libraries.

В итоге:

Ниже мы детально раскроем эти три концепции.

Примечание: Класс БД не может быть расширен или заменен вашими собственными классами. Все другие классы могут быть заменены или расширены.

Хранение

Классы ваших библиотек должны находиться в директории application/libraries, так как именно там CodeIgniter будет искать их, чтобы инициализировать.

Соглашение об именовании

Файл класса

Классы должны соответствовать этому прототипу (мы используем имя Someclass просто для примера):

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function some_function()
    {
    }
}

/* End of file Someclass.php */

Использование вашего класса

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

$this->load->library('someclass');

Где someclass — это имя файла, без раширения ".php". Вы можете передать имя файла с большой буквы или с маленькой, это не имеет значения.

Загруженный класс доступен при использовании имени, написанного маленькими буквами:

$this->someclass->some_function();  // Инстанции объектов пишутся всегда с маленькой буквы

Передача параметров при инициализации вашего класса

В функцию, загружающей библиотеку, вы можете передать данные массивом во втором параметре, и они будут переданы конструктору класса:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('Someclass', $params);

Если вы используете эту опцию, вы должны сделать так, чтобы конструктор ожидал данные:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function __construct($params)
    {
        // Сделать что-то с $params
    }
}

Вы также можете передавать параметры, хранящиеся в конфигурационном файле. Просто создайте конфигурационный файл с именем, идентичным имени файла класса, и сохраните его в вашей директории 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 переменной:

$CI =& get_instance();

После того, как вы присвоили объект переменной, вы можете использовать ее вместо $this:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
и т.п.

Примечание: Помните, что get_instance() следует передавать по ссылке:

$CI =& get_instance();

Это очень важно! Передача по ссылке позволяет вам использовать оригинальный объект CodeIgniter, а не создавать его копию.

Замена родных библиотек вашими версиями

Просто назовите ваш класс идентично родной библиотеке, и он будет использоваться вместо нее. Чтобы сделать это, вы должны именовать файл и декларацию класса в точности также, как и в родной библиотеке. Например, чтобы заменить родную библиотеку Email, создайте файл application/libraries/Email.php, и объявите в нем класс:

class CI_Email {

}

Заметьте, что имена большинства родных классов начинаются с CI_.

Чтобы загрузить вашу библиотеку, используйте стандартную функцию загрузки:

$this->load->library('email');

Примечание: В настоящее время классы БД не могут быть заменены вашими версиями.

Расширение родных библиотек

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

Например, чтобы расширить родной класс Email, создайте файл, называющийся application/libraries/MY_Email.php, и декларируйте в нем ваш класс:

class MY_Email extends CI_Email {

}

Примечание: если вам нужен конструктор, убедитесь в том, что он расширяет родительский конструктор:

class MY_Email extends CI_Email {

    public function __construct()
    {
        parent::__construct();
    }
}

Загрузка ваших подклассов

Чтобы загрузить ваш подкласс, используйте обычный синтаксис. Не включайте префикс. Например, чтобы загрузить пример выше, который расширяет класс Email, вы будете использовать:

$this->load->library('email');

После загрузки вы будете использовать переменную класса, как вы это обычно делаете. В случае с классом Email все вызовы будут использовать:

$this->email->some_function();

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

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

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

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

Поделиться


Переведено в компании Аринт.

Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter

Яндекс.Метрика