-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
/
UrlPackage.php
82 lines (69 loc) · 1.89 KB
/
UrlPackage.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Templating\Asset;
/**
* The URL packages adds a version and a base URL to asset URLs.
*
* @author Kris Wallsmith <kris@symfony.com>
*/
class UrlPackage extends Package
{
private $baseUrls;
/**
* Constructor.
*
* @param string|array $baseUrls Base asset URLs
* @param string $version The package version
* @param string $format The format used to apply the version
*/
public function __construct($baseUrls = array(), $version = null, $format = null)
{
parent::__construct($version, $format);
if (!is_array($baseUrls)) {
$baseUrls = (array) $baseUrls;
}
$this->baseUrls = array();
foreach ($baseUrls as $baseUrl) {
$this->baseUrls[] = rtrim($baseUrl, '/');
}
}
/**
* {@inheritdoc}
*/
public function getUrl($path, $version = null)
{
if (false !== strpos($path, '://') || 0 === strpos($path, '//')) {
return $path;
}
$url = $this->applyVersion($path, $version);
if ($url && '/' != $url[0]) {
$url = '/'.$url;
}
return $this->getBaseUrl($path).$url;
}
/**
* Returns the base URL for a path.
*
* @param string $path
*
* @return string The base URL
*/
public function getBaseUrl($path)
{
switch ($count = count($this->baseUrls)) {
case 0:
return '';
case 1:
return $this->baseUrls[0];
default:
return $this->baseUrls[fmod(hexdec(substr(hash('sha256', $path), 0, 10)), $count)];
}
}
}