Completed
Push — master ( 3b57f0...583d88 )
by Basil
02:11
created

Url::cleanHost()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
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));
0 ignored issues
show
Security Bug introduced by
It seems like parse_url(\luya\helpers\...tp($url), PHP_URL_HOST) targeting parse_url() can also be of type false; however, luya\helpers\Url::cleanHost() does only seem to accept string, did you maybe forget to handle an error condition?
Loading history...
121
    }
122
}
123