1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace luya\helpers; |
4
|
|
|
|
5
|
|
|
use Yii; |
6
|
|
|
|
7
|
|
|
/** |
8
|
|
|
* Helper methods when dealing with URLs and Links. |
9
|
|
|
* |
10
|
|
|
* Extends the {{yii\helpers\BaseUrl}} class by some usefull functions like: |
11
|
|
|
* |
12
|
|
|
* + {{luya\helpers\Url::trailing()}} |
13
|
|
|
* + {{luya\helpers\Url::toInternal()}} |
14
|
|
|
* + {{luya\helpers\Url::toAjax()}} |
15
|
|
|
* + {{luya\helpers\Url::ensureHttp()}} |
16
|
|
|
* |
17
|
|
|
* An example of create an URL based on Route in the UrlManager: |
18
|
|
|
* |
19
|
|
|
* ```php |
20
|
|
|
* Url::toRoute(['/module/controller/action']); |
21
|
|
|
* ``` |
22
|
|
|
* |
23
|
|
|
* @author Basil Suter <[email protected]> |
24
|
|
|
* @since 1.0.0 |
25
|
|
|
*/ |
26
|
|
|
class Url extends \yii\helpers\BaseUrl |
27
|
|
|
{ |
28
|
|
|
/** |
29
|
|
|
* Add a trailing slash to an url if there is no trailing slash at the end of the url. |
30
|
|
|
* |
31
|
|
|
* @param string $url The url which a trailing slash should be appended |
32
|
|
|
* @param string $slash If you want to trail a file on a windows system it gives you the ability to add forward slashes. |
33
|
|
|
* @return string The url with added trailing slash, if requred. |
34
|
|
|
*/ |
35
|
|
|
public static function trailing($url, $slash = '/') |
36
|
|
|
{ |
37
|
|
|
return rtrim($url, $slash) . $slash; |
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
/** |
41
|
|
|
* This helper method will not concern any context informations |
42
|
|
|
* |
43
|
|
|
* @param array $routeParams Example array to route `['/module/controller/action']`. |
44
|
|
|
* @param boolean $scheme Whether to return the absolute url or not |
45
|
|
|
* @return string The created url. |
46
|
|
|
*/ |
47
|
|
|
public static function toInternal(array $routeParams, $scheme = false) |
48
|
|
|
{ |
49
|
|
|
if ($scheme) { |
50
|
|
|
return Yii::$app->getUrlManager()->internalCreateAbsoluteUrl($routeParams); |
51
|
|
|
} |
52
|
|
|
|
53
|
|
|
return Yii::$app->getUrlManager()->internalCreateUrl($routeParams); |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
/** |
57
|
|
|
* Create a link to use when point to an ajax script. |
58
|
|
|
* |
59
|
|
|
* @param string $route The base routing path defined in yii. module/controller/action |
60
|
|
|
* @param array $params Optional array containing get parameters with key value pairing |
61
|
|
|
* @return string The ajax url link. |
62
|
|
|
*/ |
63
|
|
|
public static function toAjax($route, array $params = []) |
64
|
|
|
{ |
65
|
|
|
$routeParams = ['/'.$route]; |
66
|
|
|
foreach ($params as $key => $value) { |
67
|
|
|
$routeParams[$key] = $value; |
68
|
|
|
} |
69
|
|
|
|
70
|
|
|
return static::toInternal($routeParams, true); |
71
|
|
|
} |
72
|
|
|
|
73
|
|
|
/** |
74
|
|
|
* Apply the http protcol to an url to make sure valid clickable links. Commonly used when provide link where user could have added urls |
75
|
|
|
* in an administration area. For Example: |
76
|
|
|
* |
77
|
|
|
* ```php |
78
|
|
|
* Url::ensureHttp('luya.io'); // return http://luya.io |
79
|
|
|
* Url::ensureHttp('www.luya.io'); // return https://luya.io |
80
|
|
|
* Url::ensureHttp('luya.io', true); // return https://luya.io |
81
|
|
|
* ``` |
82
|
|
|
* |
83
|
|
|
* @param string $url The url where the http protcol should be applied to if missing |
84
|
|
|
* @param boolean $https Whether the ensured url should be returned as https or not. |
85
|
|
|
* @return string |
86
|
|
|
*/ |
87
|
|
|
public static function ensureHttp($url, $https = false) |
88
|
|
|
{ |
89
|
|
|
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) { |
90
|
|
|
$url = ($https ? "https://" : "http://") . $url; |
91
|
|
|
} |
92
|
|
|
|
93
|
|
|
return $url; |
94
|
|
|
} |
95
|
|
|
|
96
|
|
|
/** |
97
|
|
|
* Removes schema, protocol and www. subdomain from host. |
98
|
|
|
* |
99
|
|
|
* For example `https://luya.io/path` would return `luya.io/path`. |
100
|
|
|
* |
101
|
|
|
* @param string $url The url to extract |
102
|
|
|
* @return string returns the url without protocol or www. subdomain |
103
|
|
|
* @since 1.0.20 |
104
|
|
|
*/ |
105
|
|
|
public static function cleanHost($url) |
106
|
|
|
{ |
107
|
|
|
return str_replace(['www.', 'http://', 'https://'], '', Url::ensureHttp($url)); |
108
|
|
|
} |
109
|
|
|
/** |
110
|
|
|
* Return only the domain of a path. |
111
|
|
|
* |
112
|
|
|
* For example `https://luya.io/path` would return `luya.io` without path informations. |
113
|
|
|
* |
114
|
|
|
* @param string $url The url to extract |
115
|
|
|
* @return string Returns only the domain from the url. |
116
|
|
|
* @since 1.0.20 |
117
|
|
|
*/ |
118
|
|
|
public static function domain($url) |
119
|
|
|
{ |
120
|
|
|
return self::cleanHost(parse_url(Url::ensureHttp($url), PHP_URL_HOST)); |
|
|
|
|
121
|
|
|
} |
122
|
|
|
} |
123
|
|
|
|