Инструменты пользователя

Инструменты сайта


Боковая панель

Разделы

Общее описание
История изменений
Рекомендации к обновлению
Планы на будущее
Известные проблемы
Онлайн демо
Случайная статья
Видео
Помощь проекту
Люди

FAQ



Редактировать сайдбар

yalf

YALF - Yet Another Lightweight Framework

Зачем?

Что включает?

Системные требования

PHP: >=5.3, 7.0, 7.2, 7.4
PHP extensions: BCMATH CURL GD ICONV MBSTRING MYSQL/MYSQLI PDF SNMP SOAP XML ZIP ZLIB SOCKETS FTP IMAP JSON POSIX PHAR SESSION SIMPLEXML TOKENIZER MEMCACHED
PHP Options: short_open_tag=on, safe_mode=off, register_globals=off, magic_quotes=off, allow_url_fopen=on

Установка

$ mkdir myapp
$ cd myapp
$ fetch https://github.com/nightflyza/YALF/archive/master.zip
$ unzip master.zip && rm -fr master.zip && mv YALF-master/* ./ && rm -fr YALF-master
$ chmod -R 777 exports content config

Начальная конфигурация config/yalf.ini

yalf.ini
; Main module name from modules/general/
INDEX_MODULE="index"
; Template name to preload from skins/ like "paper", "void", etc...
YALF_SKIN="paper"
; Default application language. Loaded from languages directory.
YALF_LANG="english"
; Allow online language switching by remote clients? 
; Now supported locale switching by GET callback like ?yalfswitchlocale=ukrainian
YALF_LANG_SWITCHABLE=0
;Is application global menu rendering enabled?
YALF_MENU_ENABLED=1

; XHProf libs path. Recomended to be masked in production.
XHPROF_PATH="_xhprof"

; Your application logo, name and site URL
YALF_LOGO="skins/yalflogo.png"
YALF_URL="http://ubilling.net.ua"
YALF_APP="Dummy application"
YALF_TITLE="Application title here"

; Disabled modules list. Separator - comma.
YALF_DISABLED_MODULES=""

; Emulate RCMS users auth and rights system?
YALF_AUTH_ENABLED=0

; Modules which not require any authorization (public modules)
YALF_NO_AUTH_MODULES=""

; Logging emulation. Possible values: fake(output to nowhere), file(output to content/logs/yalflog.log), mysql (YALF_LOG_TABLE table)
YALF_LOGGING_TYPE="fake"
YALF_LOG_TABLE="weblogs"

;Configs editable from web with sysconf module. Comma separated.
YALF_EDITABLE_CONFIGS="config/yalf.ini,config/mysql.ini,config/globalmenu.ini,config/alter.ini"

; List of layers which must be loaded, with their dependencies. 
; Format: LAYER_*="lib1,lib2,lib3" will load api/libs/api.lib1.php etc..
LAYER_LOCALE="i18n"
;LAYER_NYANORM="mysql,nyanorm"
;LAYER_CACHE="ubconfig,ubcache"
;LAYER_MAPS="mapscompat,lmaps,ubconfig"
;LAYER_TELEGRAM="telegram,ubconfig"
;LAYER_WHOIS="whois"
;LAYER_SNMP="snmp,ubconfig"

; Renderer layers
LAYER_WEBRENDER="webrender,workicons,astral"
;LAYER_CLIRENDER="clirender"

Чуть более детально

Основным файлом конфигурации для вашего приложения является вышеуказанный config/yalf.ini. В принципе, что в нем происходит довольно самоочевидно, для тех, кто хоть немного знаком с парадигмами написания кода и пользовательских модулей для Ubilling. Из незначительных новшеств, вы можете заметить отключаемую подсистему авторизации, отключаемый движок локализации и оптимизированную а главное управляемую систему предварительной загрузки библиотек, с кодовым названием LAYERS_OF_FEAR aka «Слои Страха».

Если вкратце, то авторизация глобально включается-выключается опцией YALF_AUTH_ENABLED. В случае включения движка авторизации, все модули, кроме перечисленных в опции YALF_NO_AUTH_MODULES вместо собственно своего исполнения, принудительно подменяются на модуль loginform. После прохождения авторизации пользователем, внутри модулей могут уже нормально отрабатывать проверки наличия тех или иных прав на базе cfr(). Важно: при отключенной системе эмуляции авторизации функция cfr() всегда будет возвращать true. Собственно отключение YALF_AUTH_ENABLED просто будет симулировать «залогиненность» пользователя с рутовыми правами. Для проверки на включенность авторизации, вы всегда можете использовать

$system->getAuthEnabled()

возвращающий boolean.

Слои Страха

Вы всегда можете оптимизировать загрузку библиотек из api/libs/ нужных вашему приложению при помощи конструкций вида LAYER_* . Собственно все сводится к банальному перечислению требуемых вам библиотек для каждого слоя через запятую, либо раскоментированием нужных вам уже заготовленных слоев в конфиге по-умолчанию. Тоесть, для примера, когда вашему приложению требуется как работа с MySQL, так и кэширование и еще вы, допустим, собрались рисовать карты, вы можете просто раскоментировать следующие слои в конфиге по-умолчанию:

LAYER_NYANORM="mysql,nyanorm"
LAYER_CACHE="ubconfig,ubcache"
LAYER_MAPS="mapscompat,lmaps,ubconfig"

Либо отдельно перечислить это в вашем личном слое библиотек, например как-то так:

LAYER_MYAWESOMEAPP="mysql,nyanorm,ubconfig,ubcache,mapscompat,lmaps"

Следует заметить, что не стоит опасаться повторения библиотек в разных слоях. В любом случае, каждая из них будет загружена только один раз, при инициализации первого же слоя в котором она описана. Следует также заметить, что такое ручное управление библиотеками, является не объязательным, и в случае если вы следуете соглашениям кода Ubilling ваши библиотеки могут быть автоматически загружены из api/libs/ штатным автолодером классов по имени.

Web и CLI приложения

Используя разные слои отображения, такие как LAYER_WEBRENDER или LAYER_CLIRENDER вы можете нативно, и без особых усилий разрабатывать как Web-ориентированные так и CLI приложения. Для нормального восприятия параметров из аргументов в CLI вы можете использовать библиотеку ubRouting. Хотя как всегда вас никто ни к чему не принуждает ;)

Давайте для примера посмотрим как может работать простое CLI приложение работающее при этом скажем с кэшированием и OmaeURL. Для этого мы используем следующие слои:

LAYER_CLIRENDER="clirender"
LAYER_ADVICEAPP="ubconfig,ubcache,omaeurl"

И собственно код, рисующий нам в CLI «совет часа»:

if (ubRouting::optionCliCount() > 1) {
    if (ubRouting::optionCliCheck('get')) {
        $getOption = ubRouting::optionCli('get', 'vf');
        if ($getOption == 'advice') {
            $cache = new UbillingCache();
            $cacheTimeout = 3600;
            $cacheKey = 'SOMEADVICE';
 
            $currentAdvice = $cache->get($cacheKey, $cacheTimeout);
            if (empty($currentAdvice)) {
                //need to update cache
                $adviceUrl = 'http://fucking-great-advice.ru/api/random';
                $fga = new OmaeUrl($adviceUrl);
                $rawAdvice = $fga->response();
                if (!empty($rawAdvice)) {
                    $rawAdvice = @json_decode($rawAdvice, true);
                    if (!empty($rawAdvice)) {
                        if (isset($rawAdvice['text'])) {
                            $currentAdvice = $rawAdvice['text'];
                            //updating cache
                            $cache->set($cacheKey, $currentAdvice, $cacheTimeout);
                        }
                    }
                } else {
                    show_error(__('Error receiving advice from remote API'));
                }
            }
 
            show_window(__('Advice of the hour') . ':', zb_TranslitString($currentAdvice));
        } else {
            show_error(__('No known get value, try "php --get=advice"'));
        }
    } else {
        show_error(__('No known CLI options, try "php --get=advice"'));
    }
} else {
    show_error(__('Not enought CLI options, try "php --get=advice"'));
}

Все, теперь мы можем использовать наше приложение из CLI прямо вот так:

$ php index.php --get=advice
Advice of the hour:
bolshe blya hodi peshkom!
$
yalf.txt · Последние изменения: 2020/11/30 19:19 — nightfly