Помощники (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_, поэтому не используйте это как собственный префикс.
Что теперь?
В оглавлении вы найдете список всех доступных помощников. Просмотрите их, чтобы увидеть, что они делают.