CodeIgniter User Guide Version 2.0.0


Помощники (helpers)

Помощники, как понятно по названию, помогают вам с решением некоторых задач. Каждый файл помощника — это просто коллекция функций в конкретной категории. Есть помощники URL, кототые помогают в создании ссылок, есть помощники Form, которые помогают вам создавать элементы формы, помощники Text выполняют различные процедуры с форматированием текста, помощники Cookie устанавливают и считывают куки, помощники File помогают вам работать с файлами, и так далее.

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

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

Помощники обычно находятся в директориях system/helpers и application/helpers . CodeIgniter сперва ищет в вашей директории application/helpers. Если директория не существует или конкретный помощник не обнаружен, тогда CI будет искать его в глобальной директории system/helpers.

Загрузка помощника

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

$this->load->helper('name');

Где name - это имя файла помощника, без расширения ".php"

Например, чтобы загрузить файл помощника URL, который называется url_helper.php, вы сделаете так:

$this->load->helper('url');

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

Примечание: Функция загрузки помощников выше не возвращает значение, поэтому нет смысла присваивать ее переменной. Просто используйте как показано.

Загрузка множества помощников

Если вы нуждаетесь в загрузке более, чем одного помощника, вы можете указать их массивом, например так:

$this->load->helper( array('helper1', 'helper2', 'helper3') );

Автозагрузка помощников

Если вы обнаружите, что вы нуждаетесь в конкретном помощнике глобально во всем приложении, вы можете сказать CodeIgniter, чтобы он загружал его автоматически при инициализации системы. Это можно сделать, открыв файл application/config/autoload.php и добавить помощник в массив автозагрузки.

Примечание переводчика. Внимательно изучайте комментарии внутри файлов фреймворка, в том числе и application/config/autoload.php.

Использование помощника

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

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

<?php echo anchor('blog/comments', 'Click Here');?>

Где "Click Here" — это имя ссылки, а "blog/comments" — это URI к функции контроллера, на которую вы ссылаетесь.

"Расширение" помощников

Чтобы "расширить" помощников, создайте файл в вашей директории application/helpers/, с именем, идентичным существующему помощнику, но с префиксом MY_ (этот элемент конфигурируется, смотрите ниже).

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

Например, чтобы расширить родной помощник Array, создайте файл с именем application/helpers/MY_array_helper.php, и добавьте или перегрузите (замените) функции:

// any_in_array() не входит в Array Helper, поэтому будет определена как новая функция
function any_in_array($needle, $haystack)
{
    $needle = (is_array($needle)) ? $needle : array($needle);

    foreach ($needle as $item)
    {
        if (in_array($item, $haystack))
        {
            return TRUE;
        }
        }

    return FALSE;
}

// random_element() включена в Array Helper, поэтому будет перегружена (заменена) родная функция
function random_element($array)
{
    shuffle($array);
    return array_pop($array);
}

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

Префикс имени файла для "расширения" помощников тот же, что используется для расширения библиотек и классов ядра. Чтобы установить собственный префикс, откройте ваш файл application/config/config.php и найдите этот элемент:

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

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

Что теперь?

В оглавлении вы найдете список всех доступных помощников. Просмотрите их, чтобы увидеть, что они делают.