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

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


ubrouting

Розбіжності

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

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

Порівняння попередніх версій Попередня ревізія
Наступна ревізія
Попередня ревізія
ubrouting [2023/06/16 17:10]
skybetik [Работа с внешними данными при помощи ubRouting]
ubrouting [2024/08/12 15:46] (поточний)
nightfly
Рядок 1: Рядок 1:
 ====== Робота із зовнішніми даними за допомогою ubRouting ====== ====== Робота із зовнішніми даними за допомогою ubRouting ======
  
-===== Зачем все это? =====+===== Навіщо все це? =====
  
-Возможно вас утомили постоянные игрища с wf_checkGet()/wf_CheckPost, постоянные проверки типа isset или прямые обращения к $_GET/$_POST в поисках данных прилетевших к вам из URL или из ваших форм. Уровень абстракции в виде класса ubRouting должен помочь вам решить эти проблемыи дать больше свободы в написании вашего чудесного кода.+Можливовас втомили постійні ігрища з wf_checkGet()/wf_CheckPost, постійні перевірки типу isset або прямі звернення до $_GET/$_POST у пошуках даних, що прилетіли до вас з URL або з ваших форм. Рівень абстракції у вигляді класу ubRouting має допомогти вам розв'язати ці проблемиі дати більше свободи в написанні вашого чудового коду.
  
-===== Это обязательно использовать? ===== +===== Це обов'язково використовувати? ===== 
-**Нет!** Никто вас ни в чем не ограничивает и не заставляет использовать что-либо такое специфическое в вашем новом коде, и тем более даже не намекаетчто вы должны переписать весь ваш старый код с использованием этого объекта. Возможно вам просто понравится как может выглядеть ваш код без прямых обращений к суперглобальным массивам+**Ні! ** Ніхто вас ні в чому не обмежує і не примушує використовувати будь-що таке специфічне у вашому новому кодіі тим паче навіть не натякаєщо ви маєте переписати весь ваш старий код з використанням цього обкта. Можливовам просто сподобається, який вигляд може мати ваш код без прямих звернень до суперглобальних масивів
  
 ===== Щодо іменування класу ===== ===== Щодо іменування класу =====
Рядок 20: Рядок 20:
  
 До речі так. Це все доступно починаючи з Ubilling 1.0.0 rev 6925. До речі так. Це все доступно починаючи з Ubilling 1.0.0 rev 6925.
-===== О проверке переменных на существование ===== +===== Про перевірку змінних на існування ===== 
  
-Если вы уже ранее разрабатывали код для Ubilling или хотя-бы вдумчиво его изучали, то подобные конструкции должны быть для вас очень знакомыми:+Якщо ви вже раніше розробляли код для Ubilling або хоча б вдумливо його вивчали, то подібні конструкції мають бути для вас дуже знайомими:
  
 <code php> <code php>
Рядок 29: Рядок 29:
 } }
 </code> </code>
-Понятно, да? А как же можно переписать этот же код при помощи ubRouting, чтобы было красиво и занятно? Ну давайте как-то так для начала:+Зрозуміло, так? А як же можна переписати цей самий код за допомогою ubRouting, щоб було красиво і цікаво? Ну давайте якось так для початку:
  
 <code php> <code php>
Рядок 37: Рядок 37:
 </code> </code>
  
-Стоп, но мы же проверяем на прилетание всего одну переменнуюзачем описывать ее в array и всякое такое. Кроме того мы знаем, что она будет не пустой. Окей, давайте еще проще:+Стоп, але ми ж перевіряємо на прилітання всього одну змінну, навіщо описувати її в array і таке інше. Крім тогоми знаємощо вона буде не порожньою. Окей, давайте ще простіше:
  
 <code php> <code php>
Рядок 45: Рядок 45:
 </code> </code>
  
-А вообще правильным вариантом может быть проверка в виде +А взагалі правильним варіантом може бути перевірка у вигляді  
  
 <code php> <code php>
Рядок 53: Рядок 53:
 </code> </code>
  
-Да, теперь мы можем проверять как массив параметров aka переменных так и одиночный в описав его как string.+Так, тепер ми можемо перевіряти як масив параметрів aka зміннихтак і одиночнийописавши його як string.
  
  
-А если мы знаем, что эта или другие переменные, которые мы хотим получить могут быть пустыми либо иметь значение 0, но всеравно нам надо как-то отреагировать на их появление? Раньше мы брутально использовали для этого что-то типа if (isset($_GET['test']) AND isset($_GET['another'])) и прочий бардак. Теперь можно сделать красиво? Да:+А якщо ми знаємощо ця або інші змінніякі ми хочемо отримати, можуть бути порожніми або мати значення 0, але все одно нам треба якось відреагувати на їхню появу? Раніше ми брутально використовували для цього щось типу if (isset($_GET['test']) AND isset($_GET['another']])) та інший бардак. Тепер можна зробити красиво? Так:
  
 <code php> <code php>
Рядок 64: Рядок 64:
 </code> </code>
  
-Из чего собственно очевидно, что установив второй параметр $ignoreEmpty в false мы будем довольствоваться самим фактом наличия этих переменных в независимости от их содержимого. Естественно таким образом, мы получим GOTCHA! как реакцию на URL вида **?module=ourmodule&test=&another=0**. Если же мы хотим быть уверенычто нам прилетело нечто вида **?module=ourmodule&test=notempty&another=1** нам следует использовать ubRouting::checkGet как  +З чого, власнеочевидно, що встановивши другий параметр $ignoreEmpty в falseми будемо задовольнятися самим фактом наявності цих змінних незалежно від їхнього вмісту. Природно таким чином, ми отримаємо GOTCHA! як реакцію на URL виду **?module=ourmodule&test=&another=0**. Якщо ж ми хочемо бути впевненіщо нам прилетіло щось на кшталт **?module=ourmodule&test=notempty&another=1**, то нам слід використовувати ubRouting::checkGet як   
  
 <code php> <code php>
-// По умолчанию $ignoreEmpty имеет значение true,  +// За замовчуванням $ignoreEmpty має значення true,  
-// хотя можете и указывать его напрямую как ubRouting::checkGet(array('test', 'another'),true)+// хоча можете і вказувати його безпосередньо як ubRouting::checkGet(array('test', 'another'),true)
 if (ubRouting::checkGet(array('test', 'another'))) {  if (ubRouting::checkGet(array('test', 'another'))) { 
     deb('GOTCHA!');     deb('GOTCHA!');
Рядок 74: Рядок 74:
 </code> </code>
  
-Окей, это все понятно. С GET разобрались. А что если мы хотим проверить факт прилетания данных из POST формы, скажем такой как ниже?+Окей, це все зрозуміло. З GET розібралися. А що якщо ми хочемо перевірити факт прильоту даних з POST форми, скажімо такої як нижче?
 <code php> <code php>
 $inputs= wf_TextInput('newname', __('Name'), '', true, 10); $inputs= wf_TextInput('newname', __('Name'), '', true, 10);
Рядок 83: Рядок 83:
 </code> </code>
  
-Вы не поверите. Все полностью идентично. Оно же сделано для вашего удобства. Знали? ;)+Ви не повірите. Все повністю ідентично. Воно ж зроблено для вашої зручності. Знали? ;)
  
 <code php> <code php>
Рядок 90: Рядок 90:
 } }
 </code> </code>
-(да, мы ожидаем оба поля не пустыми) +(так, ми очікуємо обидва поля не порожніми) 
-===== О получении значений переменных ===== +===== Щодо отримання значень змінних ===== 
  
-Окей. С проверкой данных на сам факт их прилета разобрались. А как теперь получать их значения? Да вообще без проблем. Давайте на примере той же формы.+Окей. З перевіркою даних на сам факт їхнього прильоту розібралися. А як тепер отримувати їхні значення? Та взагалі без проблем. Давайте на прикладі тієї ж форми.
  
 <code php> <code php>
Рядок 103: Рядок 103:
 </code> </code>
  
-и да, получать значения из GET мы можем точно так же, например так:+і так, отримувати значення з GET ми можемо точно так само, наприклад так:
 <code php> <code php>
 $variableName=ubRouting::get('another'); $variableName=ubRouting::get('another');
 </code> </code>
  
-Кстатив случаеесли вы пытаетесь получить переменную при помощи **::get** или **::post** а ее нету (да, она тупо не isset) оба этих метода будут честно возвращать **false**. Не забываем, что для таких проверок следует использовать сравнение типа !==false а не прямой if (!ubRouting::get('somevar')) так как он будет срабатывать как в случае пустой переменной так и ее несуществования в принципе.   +До речі, у разіякщо ви намагаєтеся отримати змінну за допомогою **::get** або **::post**а її немає (таквона тупо не isset)обидва ці методи будуть чесно повертати **false**. Не забуваємощо для таких перевірок слід використовувати порівняння типу !==falseа не прямий if (!ubRouting::get('somevar')), бо він буде спрацьовувати як у разі порожньої змінної, так і її неіснування в принципі.   
-=====  О их фильтрации ===== +=====  Щодо їхньої фільтрації ===== 
  
-Также вы можете фильтровать данные прямо в процессе их получения, налету. Допустим, мы хотим быть уверенными, что в newname у нас будут буковки, циферки и вообще что угодно но отфильтрованое для записи в MySQL а в newsize - только циферки. +Також ви можете фільтрувати дані прямо в процесі їх отримання, нальоту. Припустимо, ми хочемо бути впевненими, що в newname у нас будуть літери, циферки і взагалі що завгодно, але відфільтроване для запису в MySQLа в newsize - тільки циферки. 
  
  
Рядок 122: Рядок 122:
 </code> </code>
  
-Да. Это управляется вторым параметром методов get/post. Их возможные значения:+ТакЦе керується другим параметром методів get/post. Їхні можливі значення:
  
-  * **raw** (по-умолчанию) - данные будут возвращены ак есть" без какой либо предварительной обработки +  * **raw** (за замовчуванням) - дані будуть повернуті "як є" без будь-якої попередньої обробки 
-  * **int** - из данных будет отфильтровано вообще все, кроме циферок в диапазоне [0-9] +  * **int** - з даних буде відфільтровано взагалі все, крім циферок у діапазоні [0-9] 
-  * **mres** - для данных будет предварительно запущена функция mysql_real_escape_string() +  * **mres** - для даних буде попередньо запущена функція mysql_real_escape_string() 
-  * **callback** - для данных будет запущена функция с именем указанным в третьем параметре собственно $callback. +  * **callback** - для даних буде запущено функцію з ім'ям, зазначеним у третьому параметрі власне $callback. 
-  * **fi** - данные будут пропущены через [[https://www.php.net/filter|filter]].+  * **fi** - дані буде пропущено через [[https://www.php.net/filter|filter]]. 
 +  * **vf** - буде очищено від символів [~@\+\?\%\/\;=\*\>\<\"\'\-] 
 +  * **nb** - буде відфільтровано нульовий байт %00 
 +  * **float** - дозволено цифри 0-9 та розділювач у вигляді крапки. 
 +  * **login** - буде відфільтровано все, що наразі не використовується в логінах (a-z0-9A-Z_ та .)  
 +  * **safe** - більш-менш безпечні дані, викушено HTML теги, список дозволених символів: a-zA-Z0-9А-Яа-яЁёЇїІіЄєҐґ\w++«»№=_\ ,\.\-:;!?\(\){}\/\r\n\x{200d}\x{2600}-\x{1FAFF} 
 +  * **gigasafe** - дозволено тільки a-zA-Z0-9
  
-Пример тогокак вы можете использовать коллбэк функции:+Для фільтрів safe та gigasafe за потреби, ви можете ситуаційно, перелічити список додаткових символів в третьому необов'язковому параметрі $callback. 
 + 
 +Приклад того, як ви можете використовувати колбек функції:
 <code php> <code php>
 $newAnother= ubRouting::post('newanother','callback','vf'); $newAnother= ubRouting::post('newanother','callback','vf');
 </code> </code>
  
-Да. Точно также вы можете получать и фильтровать данные из GET переменных:+Так. Так само ви можете отримувати і фільтрувати дані з GETмінних:
 <code php> <code php>
 $newAnother= ubRouting::get('newanother','int'); $newAnother= ubRouting::get('newanother','int');
Рядок 141: Рядок 149:
  
  
-Также для обоих методов ::get и ::post вы можете указывать множественные коллбэк функции, просто оформив их список в виде массива. Например так:+Також для обох методів ::get і ::post ви можете вказувати множинні колбек-функції, просто оформивши їхній список у вигляді масиву. Наприклад так:
  
 <code php> <code php>
Рядок 148: Рядок 156:
 </code> </code>
  
-Коллбэк функции для данных будут вызваны последовательно, в порядке их описания. Конечно же никто вам не запрещает описывать это все и в одну строку.+Коллбек-функції для даних будуть викликані послідовно, у порядку їхнього опису. Звичайно ж ніхто вам не забороняє описувати це все і в один рядок.
  
 <code php> <code php>
Рядок 154: Рядок 162:
 </code> </code>
  
-А что если вам нужны одни и те же данные и в сыром виде и отфильтрованныеДа, вы без проблем можете точно так-же вызывать из объекта методы фильтрации с теми же параметрами, например так:+А що якщо вам потрібні одні й ті самі дані і в сирому вигляді, і відфільтрованіТак, ви без проблем можете так само викликати з обкта методи фільтрації з тими ж параметрами, наприклад так:
  
 <code php> <code php>
Рядок 161: Рядок 169:
 </code> </code>
  
-Также вы можете использовать штатные механики filter указав режим фильтрования как fi (filter input):+Також ви можете використовувати штатні механіки filter, вказавши режим фільтрування як fi (filter input):
 <code php>  <code php> 
 $data = ubRouting::get('another','fi',FILTER_SANITIZE_NUMBER_INT); $data = ubRouting::get('another','fi',FILTER_SANITIZE_NUMBER_INT);
 </code> </code>
-=====  О навигации ===== +=====  Про навігацію ===== 
  
-Возможно вам захочется делать при помощи этого же объекта какую-то внутреннюю навигацию. Для этого есть короткий и удобный метод nav($url) который вы можете использовать как-то так:+Можливовам захочеться робити за допомогою цього ж обкта якусь внутрішню навігацію. Для цього є короткий і зручний метод nav($url), який ви можете використовувати якось так:
  
 <code php> <code php>
Рядок 173: Рядок 181:
 </code> </code>
  
-Да, это всего навсего просто удобный и короткий алиас для rcms_redirect($url)+Такце всього навсього просто зручний і короткий аліас для rcms_redirect($url)
  
-===== Сырые данные ===== +===== Сирі дані ===== 
  
-Также можно получать копии суперглобальных массивов $_GET и $_POST целиком, при помощи соответствующих методов.+Також можна отримувати копії суперглобальних масивів $_GET і $_POST цілком, за допомогою відповідних методів.
  
 <code php> <code php>
Рядок 185: Рядок 193:
  
  
-=====  О Исключениях ===== +=====  Про Винятки ===== 
  
-При попытках использования недопустимых $filtering или неверном указании коллбек-функции в ::get/::post методах а также пустых параметрах для ::check методов, будут выброшены соответствующие исключения:+У разі спроб використання неприпустимих $filtering або невірної вказівки колбек-функції в ::get/::post методаха також порожніх параметрах для ::check методів, будуть викинуті відповідні винятки:
  
-  * **EX_WRONG_FILTERING_MODE** - несуществующий режим фильтрования данных. +  * **EX_WRONG_FILTERING_MODE** - неіснуючий режим фільтрування даних. 
-  * **EX_CALLBACK_NOT_DEFINED** - коллбэк функция не существует/не объявлена. +  * **EX_CALLBACK_NOT_DEFINED** - коллбек функція не існує/не оголошена. 
-  * **EX_CALLBACK_EMPTY** - пустое имя коллбэк функции+  * **EX_CALLBACK_EMPTY** - порожнє ім'я колбек функції
-  * **EX_FILTER_EMPTY** - пустое имя фильтра. +  * **EX_FILTER_EMPTY** - порожнє ім'я фільтра. 
-  * **EX_PARAMS_EMPTY** - пустое имя или массив имен переменных для check+  * **EX_PARAMS_EMPTY** - порожнє ім'я або масив імен змінних для check
  
-===== О синтаксисе ===== +===== Про синтаксис ===== 
  
-Вы вообще можете использовать это как угодно и обращаться к этому как угодно и удобно лично вам, в своей практической деятельности. Хоть так:+Ви взагалі можете використовувати це як завгодно і звертатися до цього як завгодно і зручно особисто вам, у своїй практичній діяльності. Хоч так:
  
 <code php> <code php>
Рядок 263: Рядок 271:
 </code> </code>
  
-И вообще делайте что хотите. Хотите вызывайте методы при помощи paamayim nekudotayim (::) прямо из объекта ubRouting. Хотите создавайте его экземпляры и обращайтесь к методам при помощи - >, хотите наследуйте и расширяйте функционал как вам угодно.+І взагалі робіть що хочете. Хочете викликайте методи за допомогою paamayim nekudotayim (::) прямо з обкта ubRouting. Хочете створюйте його екземпляри і звертайтеся до методів за допомогою - >, хочете успадковуйте і розширюйте функціонал як вам завгодно.
ubrouting.1686924617.txt.gz · Востаннє змінено: 2023/06/16 17:10 повз skybetik