diff --git a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php index 9dd6a2b96314a..0bcfd1199433d 100644 --- a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php +++ b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php @@ -48,15 +48,16 @@ public function getFunctions() * * Absolute paths (i.e. http://...) are returned unmodified. * - * @param string $path A public path - * @param string $packageName The name of the asset package to use - * @param Boolean $absolute Whether to return an absolute URL or a relative one + * @param string $path A public path + * @param string $packageName The name of the asset package to use + * @param Boolean $absolute Whether to return an absolute URL or a relative one + * @param string|Boolean|null $version A specific version * * @return string A public path which takes into account the base path and URL path */ - public function getAssetUrl($path, $packageName = null, $absolute = false) + public function getAssetUrl($path, $packageName = null, $absolute = false, $version = null) { - $url = $this->container->get('templating.helper.assets')->getUrl($path, $packageName); + $url = $this->container->get('templating.helper.assets')->getUrl($path, $packageName, $version); if (!$absolute) { return $url; diff --git a/src/Symfony/Component/Templating/Asset/Package.php b/src/Symfony/Component/Templating/Asset/Package.php index 58d6ef45c4421..bb7bef23f0c0a 100644 --- a/src/Symfony/Component/Templating/Asset/Package.php +++ b/src/Symfony/Component/Templating/Asset/Package.php @@ -33,34 +33,42 @@ public function __construct($version = null, $format = '') $this->format = $format ?: '%s?%s'; } + /** + * {@inheritdoc} + */ public function getVersion() { return $this->version; } - public function getUrl($path) + /** + * {@inheritdoc} + */ + public function getUrl($path, $version = null) { if (false !== strpos($path, '://') || 0 === strpos($path, '//')) { return $path; } - return $this->applyVersion($path); + return $this->applyVersion($path, $version); } /** * Applies version to the supplied path. * - * @param string $path A path + * @param string $path A path + * @param string|Boolean|null $version A specific version * * @return string The versionized path */ - protected function applyVersion($path) + protected function applyVersion($path, $version = null) { - if (null === $this->version) { + $version = null !== $version ? $version : $this->version; + if (null === $version || false === $version) { return $path; } - $versionized = sprintf($this->format, ltrim($path, '/'), $this->version); + $versionized = sprintf($this->format, ltrim($path, '/'), $version); if ($path && '/' == $path[0]) { $versionized = '/'.$versionized; diff --git a/src/Symfony/Component/Templating/Asset/PackageInterface.php b/src/Symfony/Component/Templating/Asset/PackageInterface.php index a9ec65aecb25d..528101e3ca525 100644 --- a/src/Symfony/Component/Templating/Asset/PackageInterface.php +++ b/src/Symfony/Component/Templating/Asset/PackageInterface.php @@ -28,9 +28,10 @@ public function getVersion(); /** * Returns an absolute or root-relative public path. * - * @param string $path A path + * @param string $path A path + * @prama string|Boolean|null $version A specific version for the path * * @return string The public path */ - public function getUrl($path); + public function getUrl($path, $version = null); } diff --git a/src/Symfony/Component/Templating/Asset/PathPackage.php b/src/Symfony/Component/Templating/Asset/PathPackage.php index 1e02845c3cba8..1806107f6dfca 100644 --- a/src/Symfony/Component/Templating/Asset/PathPackage.php +++ b/src/Symfony/Component/Templating/Asset/PathPackage.php @@ -42,13 +42,16 @@ public function __construct($basePath = null, $version = null, $format = null) } } - public function getUrl($path) + /** + * {@inheritdoc} + */ + public function getUrl($path, $version = null) { if (false !== strpos($path, '://') || 0 === strpos($path, '//')) { return $path; } - $url = $this->applyVersion($path); + $url = $this->applyVersion($path, $version); // apply the base path if ('/' !== substr($url, 0, 1)) { diff --git a/src/Symfony/Component/Templating/Asset/UrlPackage.php b/src/Symfony/Component/Templating/Asset/UrlPackage.php index da5c0830fb4ea..00a21670f4459 100644 --- a/src/Symfony/Component/Templating/Asset/UrlPackage.php +++ b/src/Symfony/Component/Templating/Asset/UrlPackage.php @@ -41,13 +41,16 @@ public function __construct($baseUrls = array(), $version = null, $format = null } } - public function getUrl($path) + /** + * {@inheritdoc} + */ + public function getUrl($path, $version = null) { if (false !== strpos($path, '://') || 0 === strpos($path, '//')) { return $path; } - $url = $this->applyVersion($path); + $url = $this->applyVersion($path, $version); if ($url && '/' != $url[0]) { $url = '/'.$url; diff --git a/src/Symfony/Component/Templating/CHANGELOG.md b/src/Symfony/Component/Templating/CHANGELOG.md index 3d06446d13572..c627e669f25d6 100644 --- a/src/Symfony/Component/Templating/CHANGELOG.md +++ b/src/Symfony/Component/Templating/CHANGELOG.md @@ -1,6 +1,12 @@ CHANGELOG ========= +2.5.0 +----- + + * added ability to generate versioned URLs + * added ability to generate absolute URLs + 2.1.0 ----- diff --git a/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php b/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php index 73f1455622821..fb4ed5dca074c 100644 --- a/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php +++ b/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php @@ -105,14 +105,15 @@ public function getVersion($packageName = null) * * Absolute paths (i.e. http://...) are returned unmodified. * - * @param string $path A public path - * @param string $packageName The name of the asset package to use + * @param string $path A public path + * @param string $packageName The name of the asset package to use + * @param string|Boolean|null $version A specific version * * @return string A public path which takes into account the base path and URL path */ - public function getUrl($path, $packageName = null) + public function getUrl($path, $packageName = null, $version = null) { - return $this->getPackage($packageName)->getUrl($path); + return $this->getPackage($packageName)->getUrl($path, $version); } /** diff --git a/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php b/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php index e69fbb27c3b19..c29c6de1a332c 100644 --- a/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php +++ b/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php @@ -57,6 +57,14 @@ public function testGetUrl() $this->assertEquals('/', $helper->getUrl(''), '->getUrl() with empty arg returns the prefix alone'); } + public function testGetUrlWithVersion() + { + $helper = new AssetsHelper(null, array(), '12'); + $this->assertEquals('/foo.js?12', $helper->getUrl('foo.js')); + $this->assertEquals('/foo.js?bar', $helper->getUrl('foo.js', null, 'bar')); + $this->assertEquals('/foo.js', $helper->getUrl('foo.js', null, false)); + } + public function testGetUrlLeavesProtocolRelativePathsUntouched() { $helper = new AssetsHelper(null, 'http://foo.com');
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: