From 6fce50343246d98462ac00f289812b082167aa78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Haso=C5=88?= Date: Mon, 12 Nov 2012 15:23:36 +0100 Subject: [PATCH 1/2] [Templating] Added ability to set a specific version of the asset --- .../TwigBundle/Extension/AssetsExtension.php | 11 +++++----- .../Component/Templating/Asset/Package.php | 20 +++++++++++++------ .../Templating/Asset/PackageInterface.php | 5 +++-- .../Templating/Asset/PathPackage.php | 7 +++++-- .../Component/Templating/Asset/UrlPackage.php | 7 +++++-- src/Symfony/Component/Templating/CHANGELOG.md | 5 +++++ .../Templating/Helper/CoreAssetsHelper.php | 9 +++++---- .../Tests/Helper/AssetsHelperTest.php | 8 ++++++++ 8 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php index 9dd6a2b963..0bcfd11994 100644 --- a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php +++ b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php @@ -48,15 +48,16 @@ class AssetsExtension extends \Twig_Extension * * 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 58d6ef45c4..bb7bef23f0 100644 --- a/src/Symfony/Component/Templating/Asset/Package.php +++ b/src/Symfony/Component/Templating/Asset/Package.php @@ -33,34 +33,42 @@ class Package implements PackageInterface $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 a9ec65aecb..528101e3ca 100644 --- a/src/Symfony/Component/Templating/Asset/PackageInterface.php +++ b/src/Symfony/Component/Templating/Asset/PackageInterface.php @@ -28,9 +28,10 @@ interface PackageInterface /** * 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 1e02845c3c..1806107f6d 100644 --- a/src/Symfony/Component/Templating/Asset/PathPackage.php +++ b/src/Symfony/Component/Templating/Asset/PathPackage.php @@ -42,13 +42,16 @@ class PathPackage extends Package } } - 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 da5c0830fb..00a21670f4 100644 --- a/src/Symfony/Component/Templating/Asset/UrlPackage.php +++ b/src/Symfony/Component/Templating/Asset/UrlPackage.php @@ -41,13 +41,16 @@ class UrlPackage extends Package } } - 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 3d06446d13..5f805434c2 100644 --- a/src/Symfony/Component/Templating/CHANGELOG.md +++ b/src/Symfony/Component/Templating/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +2.2.0 +----- + + * added ability to set a specific version of the asset + 2.1.0 ----- diff --git a/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php b/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php index 73f1455622..fb4ed5dca0 100644 --- a/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php +++ b/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php @@ -105,14 +105,15 @@ class CoreAssetsHelper extends Helper implements PackageInterface * * 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 e69fbb27c3..c29c6de1a3 100644 --- a/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php +++ b/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php @@ -57,6 +57,14 @@ class AssetsHelperTest extends \PHPUnit_Framework_TestCase $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'); From 1642094cfeb032384d76fa85867912d81d3e840b Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Mon, 31 Mar 2014 15:26:45 +0200 Subject: [PATCH 2/2] [Templating] Update changelog --- src/Symfony/Component/Templating/CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Templating/CHANGELOG.md b/src/Symfony/Component/Templating/CHANGELOG.md index 5f805434c2..c627e669f2 100644 --- a/src/Symfony/Component/Templating/CHANGELOG.md +++ b/src/Symfony/Component/Templating/CHANGELOG.md @@ -1,10 +1,11 @@ CHANGELOG ========= -2.2.0 +2.5.0 ----- - * added ability to set a specific version of the asset + * added ability to generate versioned URLs + * added ability to generate absolute URLs 2.1.0 -----