Библиотеки в хаках реализуют функцию доступа к данным и выполняют роль прослойки между модулями и базой данных или сторонними сервисами. В рамках MVC-модели они больше всего похожи на "модели".
Создание библиотеки
Работа с библиотеками осуществляется в разделе "Библиотеки" по кнопке "Файлы". Сами файлы библиотек располагаются в папке lib
вашего хака. Название файла с библиотекой может состоять из маленьких латинских букв и цифр. Оно обязательно должно начинаться с буквы, а не цифры. Нельзя использовать заглавные буквы и спецсимволы, в том числе дефис или знак подчёркивания.
В момент создания библиотеки, в файле автоматически создаётся соответствующий класс. Название класса состоит из слова hack
, названия хака и названия библиотеки, разделенных знаком подчёркивания, например: hack_proxy_items
.
class hack_proxy_items { … }
В библиотеку обязательно включить следующий конструктор:
private $core; public function __construct( $core ) { $this->core = $core; // Остальной код инициализации }
Использование $core
требуется практически для всех задач в работе с системой. Вызов конструктора библиотеки всегда производится с параметром $core
.
Подключение и использование библиотек
Библиотека автоматически загружается и инициализируются при первом вызове. Вызов библиотеки осуществляется кодом:
$core->hack->(name)->(library)
Например, для обращения к библиотеке items
модуля proxy
будет использоваться вызов:
$core->hack->proxy->items
Рекомендуется сразу же обращаться к вложенным функциям или полям самой библиотеки, например:
$core->hack->proxy->items->add( $item ); $core->hack->proxy->items->mode = 10;
Переопределение системных библиотек
Не рекомендуется это делать. Но в исключительных случаях, вы можете расширить системные библиотеки с помощью хаков. Делать это можно только с огромной осторожностью.
Файл должен носить то же название, что и оригинальная библиотека. В нём располагается класс с названием hack_name
, унаследованный от name
, где name
- название исходной библиотеки.
Например:
class hack_address extends address { public function check( $geo, $i, $a, $c, $s, $h ) { if ( $geo == 'kz' ) return $core->hack->cisaddr->kz->check( $i, $a, $c, $s, $h ); if ( $geo == 'kg' ) return $core->hack->cisaddr->kg->check( $i, $a, $c, $s, $h ); return parent::check( $geo, $i, $a, $c, $s, $h ); } }
Список переопределенных библиотек указывается в массиве инициализации с ключом lib
. В нём должны быть названия файлов библиотек без расширения.
Например:
return [ /* другие команды инициализации */ 'lib' => [ 'address' ] ];