Користувальницькькі налаштування

Налаштування сайту


yalf

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
Наступна ревізія По сторонах наступні версії
yalf [2020/06/05 03:28]
yalf [2023/06/16 10:24]
nightfly
Рядок 1: Рядок 1:
 +====== YALF - Yet Another Lightweight Framework ======
  
 +{{:yalflogo.png|}}
 +
 +
 +===== Навіщо? =====
 +
 +{{:treba.jpg?600|}}
 +
 +===== Що вколючає? =====
 +
 +  * [[nyanorm|NyanORM - для надзручної роботи з БД]]
 +  * [[ubrouting|ubRouting - для забезпечення роботи із зовнішніми даними, їх фільтрацією та раутингом]]
 +  * [[apiastral|Astral - для швидкого прототипування вьюшок]]
 +  * [[ubillingcache|Ubilling Cache - для влаштовування кешування всілякого]]
 +  * [[snmphelper|SNMP helper - для штурхання залізяк і не залізяк в SNMP]]
 +  * [[omaeurl|OmaeURL - для зручної роботи із зовнішніми API та іншими віддаленими URL-ами]]
 +  * [[ubillingtelegram|Telegram API - для базової роботи з ботами Telegram]]
 +  * [[wolfdispatcher|WolfDispatcher - і зручного написання хуків для них]]
 +  * [[stardust|StarDust - для того, щоб зручно менеджити ваші процеси]]
 +  * І ще багато-багато шматочків, які ви раніше бачили і використовували у вигляді Ubilling
 +
 +
 +
 +===== Системные требования =====
 +
 +**PHP:** >=5.3, 7.0, 7.2, 7.4, 8.2\\
 +**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 
 +
 +
 +===== Установка =====
 +
 +<code bash>
 +$ mkdir myapp
 +$ cd myapp
 +$ fetch http://yalf.nightfly.biz/yalf_current.tgz
 +$ tar zxvf yalf_current.tgz && rm -fr yalf_current.tgz
 +$ chmod -R 777 exports content config
 +</code>
 +
 +===== Начальная конфигурация config/yalf.ini =====
 +
 +<file 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://yalf.nightfly.biz"
 +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,sqldebug"
 +;LAYER_CACHE="ubconfig,ubcache"
 +;LAYER_MAPS="mapscompat,lmaps,ubconfig"
 +;LAYER_TELEGRAM="telegram,ubconfig"
 +;LAYER_WHOIS="whois"
 +;LAYER_SNMP="snmphelper,ubconfig"
 +;LAYER_ZEN="zenflow"
 +;LAYER_GRAVATAR="ubconfig,gravatar"
 +
 +; Renderer layers
 +LAYER_WEBRENDER="webrender,workicons,astral"
 +;LAYER_CLIRENDER="clirender"
 +</file>
 +
 +===== Чуть более детально =====
 +
 +Основным файлом конфигурации для вашего приложения является вышеуказанный **config/yalf.ini**. В принципе, что в нем происходит довольно самоочевидно, для тех, кто хоть немного знаком с парадигмами написания кода и пользовательских модулей для Ubilling. Из незначительных новшеств, вы можете заметить отключаемую подсистему авторизации, отключаемый движок локализации и оптимизированную а главное управляемую систему предварительной загрузки библиотек, с кодовым названием LAYERS_OF_FEAR aka "Слои Страха".
 +
 +Если вкратце, то авторизация глобально включается-выключается опцией **YALF_AUTH_ENABLED**. В случае включения движка авторизации, все модули, кроме перечисленных в опции **YALF_NO_AUTH_MODULES** вместо собственно своего исполнения, принудительно подменяются на модуль loginform. После прохождения авторизации пользователем, внутри модулей могут уже нормально отрабатывать проверки наличия тех или иных прав на базе cfr(). Важно: при отключенной системе эмуляции авторизации функция cfr() всегда будет возвращать true. Собственно отключение **YALF_AUTH_ENABLED** просто будет симулировать "залогиненность" пользователя с рутовыми правами. Для проверки на включенность авторизации, вы всегда можете использовать 
 +<code php>$system->getAuthEnabled()</code>
 +
 +возвращающий boolean.
 +
 +===== Слои Страха =====
 +
 +Вы всегда можете оптимизировать загрузку библиотек из **api/libs/** нужных вашему приложению при помощи конструкций вида **LAYER_* **. Собственно все сводится к банальному перечислению требуемых вам библиотек для каждого слоя через запятую, либо раскоментированием нужных вам уже заготовленных слоев в конфиге по-умолчанию. Тоесть, для примера, когда вашему приложению требуется как работа с MySQL, так и кэширование и еще вы, допустим, собрались рисовать карты, вы можете просто раскоментировать следующие слои в конфиге по-умолчанию:
 +
 +<code ini> 
 +LAYER_NYANORM="mysql,nyanorm"
 +LAYER_CACHE="ubconfig,ubcache"
 +LAYER_MAPS="mapscompat,lmaps,ubconfig"
 +</code>
 +
 +Либо отдельно перечислить это в вашем личном слое библиотек, например как-то так:
 +<code ini>
 +LAYER_MYAWESOMEAPP="mysql,nyanorm,ubconfig,ubcache,mapscompat,lmaps"
 +</code>
 +
 +Следует заметить, что не стоит опасаться повторения библиотек в разных слоях. В любом случае, каждая из них будет загружена только один раз, при инициализации первого же слоя в котором она описана. Следует также заметить, что такое ручное управление библиотеками, является не обязательным, и в случае если вы следуете [[development|соглашениям кода Ubilling]] ваши библиотеки могут быть автоматически загружены из **api/libs/** штатным автолодером классов по имени.
 +
 +===== Web и CLI приложения =====
 +
 +Используя разные слои отображения, такие как LAYER_WEBRENDER или LAYER_CLIRENDER вы можете нативно, и без особых усилий разрабатывать как Web-ориентированные так и CLI приложения. Для нормального восприятия параметров из аргументов в CLI вы можете использовать библиотеку [[ubrouting|ubRouting]]. Хотя как всегда вас никто ни к чему не принуждает ;) \\
 +
 +Давайте для примера посмотрим как может работать простое CLI приложение работающее при этом скажем с [[ubillingcache|кэшированием]] и [[omaeurl|OmaeURL]]. Для этого мы используем следующие слои:
 +
 +<code ini>
 +LAYER_CLIRENDER="clirender"
 +LAYER_ADVICEAPP="ubconfig,ubcache,omaeurl"
 +</code>
 +
 +И собственно код, рисующий нам в CLI "совет часа":
 +
 +<code php>
 +
 +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://ubilling.net.ua/fga/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"'));
 +}
 +</code>
 +
 +Все, теперь мы можем использовать наше приложение из CLI прямо вот так:
 +
 +<code bash>
 +$ php index.php --get=advice
 +Advice of the hour:
 +bolshe blya hodi peshkom!
 +$
 +</code>
yalf.txt · Востаннє змінено: 2023/06/16 12:08 повз nightfly