123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- <?php
- namespace yii\helpers;
- use Yii;
- use yii\base\InvalidArgumentException;
- class BaseUrl
- {
-
- public static $urlManager;
-
- public static function toRoute($route, $scheme = false)
- {
- $route = (array) $route;
- $route[0] = static::normalizeRoute($route[0]);
- if ($scheme !== false) {
- return static::getUrlManager()->createAbsoluteUrl($route, is_string($scheme) ? $scheme : null);
- }
- return static::getUrlManager()->createUrl($route);
- }
-
- protected static function normalizeRoute($route)
- {
- $route = Yii::getAlias((string) $route);
- if (strncmp($route, '/', 1) === 0) {
-
- return ltrim($route, '/');
- }
-
- if (Yii::$app->controller === null) {
- throw new InvalidArgumentException("Unable to resolve the relative route: $route. No active controller is available.");
- }
- if (strpos($route, '/') === false) {
-
- return $route === '' ? Yii::$app->controller->getRoute() : Yii::$app->controller->getUniqueId() . '/' . $route;
- }
-
- return ltrim(Yii::$app->controller->module->getUniqueId() . '/' . $route, '/');
- }
-
- public static function to($url = '', $scheme = false)
- {
- if (is_array($url)) {
- return static::toRoute($url, $scheme);
- }
- $url = Yii::getAlias($url);
- if ($url === '') {
- $url = Yii::$app->getRequest()->getUrl();
- }
- if ($scheme === false) {
- return $url;
- }
- if (static::isRelative($url)) {
-
- $url = static::getUrlManager()->getHostInfo() . '/' . ltrim($url, '/');
- }
- return static::ensureScheme($url, $scheme);
- }
-
- public static function ensureScheme($url, $scheme)
- {
- if (static::isRelative($url) || !is_string($scheme)) {
- return $url;
- }
- if (substr($url, 0, 2) === '//') {
-
- return $scheme === '' ? $url : "$scheme:$url";
- }
- if (($pos = strpos($url, '://')) !== false) {
- if ($scheme === '') {
- $url = substr($url, $pos + 1);
- } else {
- $url = $scheme . substr($url, $pos);
- }
- }
- return $url;
- }
-
- public static function base($scheme = false)
- {
- $url = static::getUrlManager()->getBaseUrl();
- if ($scheme !== false) {
- $url = static::getUrlManager()->getHostInfo() . $url;
- $url = static::ensureScheme($url, $scheme);
- }
- return $url;
- }
-
- public static function remember($url = '', $name = null)
- {
- $url = static::to($url);
- if ($name === null) {
- Yii::$app->getUser()->setReturnUrl($url);
- } else {
- Yii::$app->getSession()->set($name, $url);
- }
- }
-
- public static function previous($name = null)
- {
- if ($name === null) {
- return Yii::$app->getUser()->getReturnUrl();
- }
- return Yii::$app->getSession()->get($name);
- }
-
- public static function canonical()
- {
- $params = Yii::$app->controller->actionParams;
- $params[0] = Yii::$app->controller->getRoute();
- return static::getUrlManager()->createAbsoluteUrl($params);
- }
-
- public static function home($scheme = false)
- {
- $url = Yii::$app->getHomeUrl();
- if ($scheme !== false) {
- $url = static::getUrlManager()->getHostInfo() . $url;
- $url = static::ensureScheme($url, $scheme);
- }
- return $url;
- }
-
- public static function isRelative($url)
- {
- return strncmp($url, '//', 2) && strpos($url, '://') === false;
- }
-
- public static function current(array $params = [], $scheme = false)
- {
- $currentParams = Yii::$app->getRequest()->getQueryParams();
- $currentParams[0] = '/' . Yii::$app->controller->getRoute();
- $route = array_replace_recursive($currentParams, $params);
- return static::toRoute($route, $scheme);
- }
-
- protected static function getUrlManager()
- {
- return static::$urlManager ?: Yii::$app->getUrlManager();
- }
- }
|