8000 [TwigBridge] use proper class to fetch asset version strategy property · symfony/symfony@01b7dd6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 01b7dd6

Browse files
committed
[TwigBridge] use proper class to fetch asset version strategy property
1 parent 2213e67 commit 01b7dd6

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

src/Symfony/Bridge/Twig/Extension/AssetExtension.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,14 @@ private function getLegacyAssetUrl($path, $packageName = null, $absolute = false
9898
{
9999
if ($version) {
100100
$package = $this->packages->getPackage($packageName);
101+
$class = new \ReflectionClass($package);
101102

102-
$v = new \ReflectionProperty($package, 'versionStrategy');
103-
$v->setAccessible(true);
103+
while ('Symfony\Component\Asset\Package' !== $class->getName()) {
104+
$class = $class->getParentClass();
105+
}
104106

107+
$v = $class->getProperty('versionStrategy');
108+
$v->setAccessible(true);
105109
$currentVersionStrategy = $v->getValue($package);
106110

107111
$f = new \ReflectionProperty($currentVersionStrategy, 'format');

src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Bridge\Twig\Extension\AssetExtension;
1515
use Symfony\Component\Asset\Package;
1616
use Symfony\Component\Asset\Packages;
17+
use Symfony\Component\Asset\PathPackage;
1718
use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;
1819

1920
class AssetExtensionTest extends \PHPUnit_Framework_TestCase
@@ -23,21 +24,32 @@ class AssetExtensionTest extends \PHPUnit_Framework_TestCase
2324
*/
2425
public function testLegacyGetAssetUrl()
2526
{
26-
$this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
27+
$extension = $this->createExtension(new Package(new StaticVersionStrategy('22', '%s?version=%s')));
2728

29+
$this->assertEquals('me.png?version=42', $extension->getAssetUrl('me.png', null, false, '42'));
30+
$this->assertEquals('http://localhost/me.png?version=22', $extension->getAssetUrl('me.png', null, true));
31+
$this->assertEquals('http://localhost/me.png?version=42', $extension->getAssetUrl('me.png', null, true, '42'));
32+
}
33+
34+
/**
35+
* @group legacy
36+
*/
37+
public function testGetAssetUrlWithPackageSubClass()
38+
{
39+
$extension = $this->createExtension(new PathPackage('foo', new StaticVersionStrategy('22', '%s?version=%s')));
40+
41+
$this->assertEquals('/foo/me.png?version=42', $extension->getAssetUrl('me.png', null, false, 42));
42+
}
43+
44+
private function createExtension(Package $package)
45+
{
2846
$foundationExtension = $this->getMockBuilder('Symfony\Bridge\Twig\Extension\HttpFoundationExtension')->disableOriginalConstructor()->getMock();
2947
$foundationExtension
3048
->expects($this->any())
3149
->method('generateAbsoluteUrl')
3250
->will($this->returnCallback(function ($arg) { return 'http://localhost/'.$arg; }))
3351
;
3452

35-
$package = new Package(new StaticVersionStrategy('22', '%s?version=%s'));
36-
$packages = new Packages($package);
37-
$extension = new AssetExtension($packages, $foundationExtension);
38-
39-
$this->assertEquals('me.png?version=42', $extension->getAssetUrl('me.png', null, false, '42'));
40-
$this->assertEquals('http://localhost/me.png?version=22', $extension->getAssetUrl('me.png', null, true));
41-
$this->assertEquals('http://localhost/me.png?version=42', $extension->getAssetUrl('me.png', null, true, '42'));
53+
return new AssetExtension(new Packages($package), $foundationExtension);
4254
}
4355
}

0 commit comments

Comments
 (0)
0