/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/helpers/UrlHelper.php
245 строк
7 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\helpers; use Yii; use yii\helpers\ArrayHelper; /** * Url дополняет дополнительные параметры для работы c URL * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2019-2023 */ class UrlHelper extends \yii\helpers\BaseUrl { /** * Merges the current GET parameters with an array of new or overloaded * parameters and returns the resulting query string. * * // Returns "?sort=title&limit=10" combined with any existing GET values * $query = UrlHelper::query(array('sort' => 'title', 'limit' => 10)); * * Typically you would use this when you are sorting query results, * or something similar. * * [!!] Parameters with a NULL value are left out. * * @param array $params Array of GET parameters * @param boolean $use_get Include current request GET parameters * @return string */ public static function query(array $params = null, $use_get = true) { if ($use_get) { if ($params === null) { // Use only the current parameters $params = $_GET; } else { // Merge the current and new parameters $params = ArrayHelper::merge($_GET, $params); } } if (empty($params)) { // No query parameters return ''; } // Note: http_build_query returns an empty string for a params array with only NULL values $query = http_build_query($params, '', '&'); // Don't prepend '?' to an empty string return ($query === '') ? '' : ('?' . $query); } /** * Возвращает TRUE если URL является ссылкой внутри адреса LINK * * @param $url - проверяемый адрес * @param $link - эталонный адрес * @return bool */ public static function isUrl($url, $link) { return (false !== mb_strpos($url, $link)); } /** * Проверить является ли текущая ссылка на страницу внтернней * Возвращает TRUE если ссылка является внутренней, в противном случае FALSE * * return bool */ public static function isSelf($url) { $host = Yii::$app->getUrlManager()->getHostInfo(); return self::isUrl($url, $host); } /** * Возвращает TRUE если URL является ссылкой внутри массива адресов URLs * * @param $url * @param array $urls * @return bool */ public static function isUrlArray($url, $urls = array()) { if (is_array($urls)) { foreach ($urls as $the_url) { if (self::isUrl($url, $the_url)) { return true; } } } return false; } /** * Обрезать схему от текущего адреса ("http://host.name" -> "host.name") * * @param $url * @return string */ public static function trimScheme($url) { $trimPos = strpos($url, '://'); if ($trimPos === false) { return $url; } return substr($url, $trimPos + 3); } /** * Содержит ли имя хоста оперделенную часть * Поиск производится вплоть до позиции $position слева-направо * [[hostIncludePart('sub.host.com', 'sub', 1)]] вернет true (sub на первой позиции) * [[hostIncludePart('sub.host.com', 'host', 1)]] вернет false (host на второй позиции) * Метод не предназначен для работы с полными URL * * @param string $host - имя хоста * @param string $part - искомая часть * @param int $position - максимальная позиция для поиска (если не задана, поиск будет осуществляться по всем частям) * @return bool */ public static function hostIncludePart($host, $part, $position = 0) { $host = static::trimScheme($host); $hostParts = explode('.', $host); $maxPosition = ($position <= 0) ? count($hostParts) : min(count($hostParts), $position); for ($counter = 0; $counter < $maxPosition; $counter++) { if ($hostParts[$counter] == $part) { return true; } } return false; } /** * получить URL без параметров QUERY_STRING * * @param $url * @return string */ public static function uri($url) { $pos = strpos($url, '?'); if ($pos !== false) { return substr($url, 0, strpos($url, '?')); } else { return $url; } } /** * Удаление параметров из строки запроса * @param $url * @param array $name * @return string */ public static function replace($url, $name = []) { $url_part = self::uri($url); $qs_part = parse_url($url, PHP_URL_QUERY); // Разбиваем строку с запросом на массив с параметрами и их значениями parse_str($qs_part, $qs_vars); // Удаляем необходимый параметр foreach ($name as $the_name => $the_value) { $qs_vars[$the_name] = $the_value; } // Собираем URL обратно if (count($qs_vars) > 0) { $url = $url_part . "?" . http_build_query($qs_vars); } else { $url = $url_part; } return $url; } /** * Выбор домена для сайта из переданного url * @param $url * @return string */ public static function reap($url) { $parsed_url = parse_url($url); if (!$scheme = ArrayHelper::getValue($parsed_url, 'scheme')) { return false; } else { if ($host = ArrayHelper::getValue($parsed_url, 'host')) { return $scheme . '://' . $host; } return false; } } /*** * @inheritdoc */ public static function to_sig($url = '', $params = []) { $params = self::getUrlSig($params); return parent::toRoute([$url] + $params); } /** * Добавляем подпись параметров в параметры URL * * @param $url_array * @return array */ public static function getUrlSig($url_array) { if (is_array($url_array)) { $params = []; foreach ($url_array as $key => $value) { if (is_string($key) and $key != 'sig') { $params[$key] = $value; } } if (count($params) > 0) { $key = AuthHelper::getKey('api'); $sig = AuthHelper::sig($params, $key); $url_array = array_merge($url_array, ['sig' => $sig]); } } return $url_array; } }