Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 09c42a9

Browse files
committed
refactored PHP and Twig asset helpers to use the new Asset component
1 parent 69fff2e commit 09c42a9

File tree

9 files changed

+91
-93
lines changed

9 files changed

+91
-93
lines changed

src/Symfony/Bridge/Twig/Extension/AssetPackagesExtension.php renamed to src/Symfony/Bridge/Twig/Extension/AssetExtension.php

Lines changed: 8 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -12,55 +12,24 @@
1212
namespace Symfony\Component\Twig\Extension;
1313

1414
use Symfony\Component\HttpFoundation\RequestStack;
15-
use Symfony\Component\Templating\Asset\PackageInterface;
15+
use Symfony\Component\Asset\Packages;
1616

1717
/**
18-
* Twig extension for Symfony asset packages.
18+
* Twig extension for the Symfony Asset component.
1919
*
2020
* @author Fabien Potencier <[email protected]>
2121
*/
22-
class AssetPackagesExtension extends \Twig_Extension
22+
class AssetExtension extends \Twig_Extension
2323
{
24-
private $defaultPackage;
25-
private $namedPackages = array();
24+
private $packages;
2625
private $requestStack;
2726

28-
/**
29-
* @param PackageInterface $defaultPackage The default package
30-
* @param array $namedPackages Additional packages indexed by name
31-
*/
32-
public function __construct(PackageInterface $defaultPackage, array $namedPackages = array(), RequestStack $requestStack = null)
27+
public function __construct(Packages $packages, RequestStack $requestStack = null)
3328
{
34-
$this->defaultPackage = $defaultPackage;
35-
36-
foreach ($namedPackages as $name => $package) {
37-
$this->addPackage($name, $package);
38-
}
39-
29+
$this->packages = $packages;
4030
$this->requestStack = $requestStack;
4131
}
4232

43-
/**
44-
* Sets the default package.
45-
*
46-
* @param PackageInterface $defaultPackage The default package
47-
*/
48-
public function setDefaultPackage(PackageInterface $defaultPackage)
49-
{
50-
$this->defaultPackage = $defaultPackage;
51-
}
52-
53-
/**
54-
* Adds an asset package to the helper.
55-
*
56-
* @param string $name The package name
57-
* @param PackageInterface $package The package
58-
*/
59-
public function addPackage($name, PackageInterface $package)
60-
{
61-
$this->namedPackages[$name] = $package;
62-
}
63-
6433
/**
6534
* Returns a list of functions to add to the existing list.
6635
*
@@ -88,7 +57,7 @@ public function getFunctions()
8857
*/
8958
public function getAssetUrl($path, $packageName = null, $absolute = false, $version = null)
9059
{
91-
$url = $this->getPackage($packageName)->getUrl($path, $version);
60+
$url = $this->packages->getUrl($path, $packageName, $version);
9261

9362
if (!$absolute) {
9463
return $url;
@@ -106,29 +75,7 @@ public function getAssetUrl($path, $packageName = null, $absolute = false, $vers
10675
*/
10776
public function getAssetsVersion($packageName = null)
10877
{
109-
return $this->getPackage($packageName)->getVersion();
110-
}
111-
112-
/**
113-
* Returns an asset package.
114-
*
115-
* @param string $name The name of the package or null for the default package
116-
*
117-
* @return PackageInterface An asset package
118-
*
119-
* @throws \InvalidArgumentException If there is no package by that name
120-
*/
121-
private function getPackage($name = null)
122-
{
123-
if (null === $name) {
124-
return $this->defaultPackage;
125-
}
126-
127-
if (!isset($this->namedPackages[$name])) {
128-
throw new \InvalidArgumentException(sprintf('There is no "%s" asset package.', $name));
129-
}
130-
131-
return $this->namedPackages[$name];
78+
return $this->packages->getVersion($packageName);
13279
}
13380

13481
/**

src/Symfony/Bridge/Twig/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
},
3838
"suggest": {
3939
"symfony/finder": "",
40+
"symfony/asset": "For using the AssetExtension",
4041
"symfony/form": "For using the FormExtension",
4142
"symfony/http-kernel": "For using the HttpKernelExtension",
4243
"symfony/routing": "For using the RoutingExtension",
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
13+
14+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
15+
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
use Symfony\Component\DependencyInjection\Definition;
17+
use Symfony\Component\DependencyInjection\Reference;
18+
19+
class AddAssetPackagesPass implements CompilerPassInterface
20+
{
21+
public function process(ContainerBuilder $container)
22+
{
23+
if (!$container->hasDefinition('templating.asset.packages')) {
24+
return;
25+
}
26+
27+
$defaultPackage = new Reference('templating.asset.default_package');
28+
$namedPackages = array();
29+
30+
// tagged packages
31+
foreach ($container->findTaggedServiceIds('templating.asset_package') as $id => $attributes) {
32+
$name = isset($attributes['name']) ? $attributes['name'] : $id;
33+
$namedPackages[$name] = $package = new Reference($id);
34+
}
35+
36+
// fix helper scope
37+
$scope = $this->getPackageScope($container, $defaultPackage);
38+
foreach ($namedPackages as $package) {
39+
if ('request' === $this->getPackageScope($container, $package)) {
40+
$scope = 'request';
41+
}
42+
}
43+
44+
$container->getDefinition('templating.asset.packages')
45+
->setScope($scope)
46+
->replaceArgument(0, $defaultPackage)
47+
->replaceArgument(1, $namedPackages)
48+
;
49+
}
50+
51+
private function getPackageScope(ContainerBuilder $container, $package)
52+
{
53+
if ($package instanceof Reference) {
54+
return $container->findDefinition((string) $package)->getScope();
55+
}
56+
57+
if ($package instanceof Definition) {
58+
return $package->getScope();
59+
}
60+
}
61+
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,16 @@ public function process(ContainerBuilder $container)
2424
return;
2525
}
2626

27-
$assetsHelperDefinition = $container->getDefinition('templating.helper.assets');
28-
$args = $assetsHelperDefinition->getArguments();
29-
30-
// add tagged packages
31-
$namedPackages = $args[1];
32-
foreach ($container->findTaggedServiceIds('templating.asset_package') as $id => $attributes) {
33-
$name = isset($attributes['name']) ? $attributes['name'] : $id;
34-
$namedPackages[$name] = $package = new Reference($id);
35-
}
36-
$assetsHelperDefinition->replaceArgument(1, $namedPackages);
37-
38-
// fix helper scope
39-
$scope = $this->getPackageScope($container, $args[0]);
40-
foreach ($namedPackages as $package) {
41-
if ('request' === $this->getPackageScope($container, $package)) {
42-
$scope = 'request';
43-
}
27+
if (!$container->hasDefinition('templating.asset.packages')) {
28+
return;
4429
}
45-
$assetsHelperDefinition->setScope($scope);
46-
}
4730

48-
private function getPackageScope(ContainerBuilder $container, $package)
49-
{
50-
if ($package instanceof Reference) {
51-
return $container->findDefinition((string) $package)->getScope();
52-
}
31+
$packages = $container->getDefinition('templating.asset.packages');
5332

54-
if ($package instanceof Definition) {
55-
return $package->getScope();
56-
}
33+
$container->getDefinition('templating.helper.assets')
34+
->setScope($packages->getScope())
35+
->replaceArgument(0, $packages->getArgument(0))
36+
->replaceArgument(1, $packages->getArgument(1))
37+
;
5738
}
5839
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,6 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
516516
$loader->load('templating_php.xml');
517517

518518
$container->setParameter('templating.helper.form.resources', $config['form']['resources']);
519-
$container->getDefinition('templating.helper.assets')->replaceArgument(0, new Reference('templating.asset.default_package'));
520519

521520
if ($container->getParameter('kernel.debug')) {
522521
$loader->load('templating_debug.xml');

src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPass;
1717
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass;
1818
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingPass;
19+
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAssetPackagesPass;
1920
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingAssetHelperPass;
2021
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RoutingResolverPass;
2122
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ProfilerPass;
@@ -76,6 +77,7 @@ public function build(ContainerBuilder $container)
7677
// but as late as possible to get resolved parameters
7778
$container->addCompilerPass(new RegisterListenersPass(), PassConfig::TYPE_BEFORE_REMOVING);
7879
$container->addCompilerPass(new TemplatingPass());
80+
$container->addCompilerPass(new AddAssetPackagesPass());
7981
$container->addCompilerPass(new TemplatingAssetHelperPass());
8082
$container->addCompilerPass(new AddConstraintValidatorsPass());
8183
$container->addCompilerPass(new AddValidatorInitializersPass());

src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111
</parameters>
1212

1313
<services>
14+
<service id="templating.asset.packages" class="Symfony\Component\Asset\Packages">
15+
<argument /> <!-- default package -->
16+
<argument type="collection" /> <!-- named packages -->
17+
</service>
18+
1419
<service id="templating.asset.path_package" class="%templating.asset.path_package.class%" abstract="true">
1520
<argument type="service" id="request" />
1621
<argument /> <!-- version -->

src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ public function process(ContainerBuilder $container)
2727
$container->getDefinition('twig.loader.filesystem')->addMethodCall('addPath', array(dirname(dirname($reflClass->getFileName())).'/Resources/views/Form'));
2828
}
2929

30+
if ($container->has('templating.asset.packages')) {
31+
$container->getDefinition('twig.extension.assets')->addTag('twig.extension');
32+
}
33+
3034
if ($container->has('translator')) {
3135
$container->getDefinition('twig.extension.trans')->addTag('twig.extension');
3236
}

src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<parameter key="templating.engine.twig.class">Symfony\Bundle\TwigBundle\TwigEngine</parameter>
1212
<parameter key="twig.cache_warmer.class">Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheCacheWarmer</parameter>
1313
<parameter key="twig.extension.trans.class">Symfony\Bridge\Twig\Extension\TranslationExtension</parameter>
14-
<parameter key="twig.extension.assets.class">Symfony\Component\Twig\Extension\AssetPackagesExtension</parameter>
14+
<parameter key="twig.extension.assets.class">Symfony\Component\Twig\Extension\AssetExtension</parameter>
1515
<parameter key="twig.extension.actions.class">Symfony\Bundle\TwigBundle\Extension\ActionsExtension</parameter>
1616
<parameter key="twig.extension.code.class">Symfony\Bridge\Twig\Extension\CodeExtension</parameter>
1717
<parameter key="twig.extension.routing.class">Symfony\Bridge\Twig\Extension\RoutingExtension</parameter>
@@ -65,9 +65,7 @@
6565
</service>
6666

6767
<service id="twig.extension.assets" class="%twig.extension.assets.class%" public="false">
68-
<tag name="twig.extension" />
69-
<argument /> <!-- default package -->
70-
<argument type="collection" /> <!-- named packages -->
68+
<argument type="service" id="templating.asset.packages" />
7169
<argument type="service" id="request_stack" on-invalid="null" />
7270
</service>
7371

0 commit comments

Comments
 (0)