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

Skip to content

Commit c37ac4d

Browse files
committed
Replace some container injections by service locators
1 parent 0be9ea8 commit c37ac4d

22 files changed

+211
-67
lines changed

UPGRADE-3.3.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,22 @@ FrameworkBundle
7171
deprecated and will be removed in 4.0. Use the `Symfony\Component\Form\DependencyInjection\FormPass`
7272
class instead.
7373

74+
* The `Symfony\Bundle\FrameworkBundle\EventListener\SessionListener` class has been
75+
deprecated and will be removed in 4.0. Use the `Symfony\Component\HttpKernel\EventListener\RequestSessionListener`
76+
class instead.
77+
78+
* The `Symfony\Bundle\FrameworkBundle\EventListener\TestSessionListener` class has been
79+
deprecated and will be removed in 4.0. Use the `Symfony\Component\HttpKernel\EventListener\TestRequestSessionListener`
80+
class instead.
81+
7482
HttpKernel
7583
-----------
7684

7785
* The `Psr6CacheClearer::addPool()` method has been deprecated. Pass an array of pools indexed
7886
by name to the constructor instead.
87+
88+
* The `LazyLoadingFragmentHandler::addRendererService()` method has been deprecated and
89+
will be removed in 4.0.
7990

8091
Process
8192
-------
@@ -127,6 +138,12 @@ TwigBridge
127138
* The `TwigRendererEngine::setEnvironment()` method has been deprecated and will be removed
128139
in 4.0. Pass the Twig Environment as second argument of the constructor instead.
129140

141+
TwigBundle
142+
----------
143+
144+
* The `ContainerAwareRuntimeLoader` class has been deprecated and will be removed in 4.0.
145+
Use the Twig `Twig_ContainerRuntimeLoader` class instead.
146+
130147
Workflow
131148
--------
132149

UPGRADE-4.0.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,13 @@ FrameworkBundle
188188
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass` class has been
189189
removed. Use the `Symfony\Component\Form\DependencyInjection\FormPass` class instead.
190190

191+
* The `Symfony\Bundle\FrameworkBundle\EventListener\SessionListener` class has been removed.
192+
Use the `Symfony\Component\HttpKernel\EventListener\RequestSessionListener` class instead.
193+
194+
* The `Symfony\Bundle\FrameworkBundle\EventListener\TestSessionListener` class has been
195+
removed. Use the `Symfony\Component\HttpKernel\EventListener\TestRequestSessionListener`
196+
class instead.
197+
191198
HttpFoundation
192199
---------------
193200

@@ -229,6 +236,8 @@ HttpKernel
229236

230237
* The `Psr6CacheClearer::addPool()` method has been removed. Pass an array of pools indexed
231238
by name to the constructor instead.
239+
240+
* The `LazyLoadingFragmentHandler::addRendererService()` method has been removed.
232241

233242
Ldap
234243
----
@@ -285,6 +294,12 @@ Translation
285294

286295
* Removed the backup feature from the file dumper classes.
287296

297+
TwigBundle
298+
----------
299+
300+
* The `ContainerAwareRuntimeLoader` class has been removed. Use the
301+
Twig `Twig_ContainerRuntimeLoader` class instead.
302+
288303
TwigBridge
289304
----------
290305

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ CHANGELOG
1515
* Added configurable paths for validation files
1616
* Deprecated `SerializerPass`, use `Symfony\Component\Serializer\DependencyInjection\SerializerPass` instead
1717
* Deprecated `FormPass`, use `Symfony\Component\Form\DependencyInjection\FormPass` instead
18+
* Deprecated `SessionListener`
19+
* Deprecated `TestSessionListener`
1820

1921
3.2.0
2022
-----

src/Symfony/Bundle/FrameworkBundle/EventListener/SessionListener.php

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,17 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\EventListener;
1313

14-
use Symfony\Component\HttpKernel\EventListener\SessionListener as BaseSessionListener;
15-
use Symfony\Component\DependencyInjection\ContainerInterface;
14+
use Symfony\Component\HttpKernel\EventListener\RequestSessionListener;
15+
16+
@trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use %s instead.', SessionListener::class, RequestSessionListener::class), E_USER_DEPRECATED);
1617

1718
/**
1819
* Sets the session in the request.
1920
*
2021
* @author Fabien Potencier <[email protected]>
22+
*
23+
* @deprecated since version 3.3, to be removed in 4.0. Use {@link RequestSessionListener} instead
2124
*/
22-
class SessionListener extends BaseSessionListener
25+
class SessionListener extends RequestSessionListener
2326
{
24-
/**
25-
* @var ContainerInterface
26-
*/
27-
private $container;
28-
29-
public function __construct(ContainerInterface $container)
30-
{
31-
$this->container = $container;
32-
}
33-
34-
protected function getSession()
35-
{
36-
if (!$this->container->has('session')) {
37-
return;
38-
}
39-
40-
return $this->container->get('session');
41-
}
4227
}

src/Symfony/Bundle/FrameworkBundle/EventListener/TestSessionListener.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,19 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\EventListener;
1313

14-
use Symfony\Component\HttpKernel\EventListener\TestSessionListener as BaseTestSessionListener;
14+
use Symfony\Component\HttpKernel\EventListener\TestRequestSessionListener;
1515
use Symfony\Component\DependencyInjection\ContainerInterface;
1616

17+
@trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use %s instead.', TestSessionListener::class, TestRequestSessionListener::class), E_USER_DEPRECATED);
18+
1719
/**
1820
* TestSessionListener.
1921
*
2022
* @author Fabien Potencier <[email protected]>
23+
*
24+
* @deprecated since version 3.3, to be removed in 4.0.
2125
*/
22-
class TestSessionListener extends BaseTestSessionListener
26+
class TestSessionListener extends TestRequestSessionListener
2327
{
2428
protected $container;
2529

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<services>
1313
<service id="fragment.handler" class="Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler">
14-
<argument type="service" id="service_container" />
14+
<argument /> <!-- fragment renderer locator -->
1515
<argument type="service" id="request_stack" />
1616
<argument>%kernel.debug%</argument>
1717
</service>

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,11 @@
4747

4848
<service id="session.handler.write_check" class="Symfony\Component\HttpFoundation\Session\Storage\Handler\WriteCheckSessionHandler" public="false" />
4949

50-
<service id="session_listener" class="Symfony\Bundle\FrameworkBundle\EventListener\SessionListener">
50+
<service id="session_listener" class="Symfony\Component\HttpKernel\EventListener\RequestSessionListener">
5151
<tag name="kernel.event_subscriber" />
52-
<argument type="service" id="service_container" />
52+
<argument type="service-locator">
53+
<argument key="session" type="service" id="session" on-invalid="null" />
54+
</argument>
5355
</service>
5456

5557
<service id="session.save_listener" class="Symfony\Component\HttpKernel\EventListener\SaveSessionListener">

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020

2121
<service id="test.client.cookiejar" class="Symfony\Component\BrowserKit\CookieJar" shared="false" />
2222

23-
<service id="test.session.listener" class="Symfony\Bundle\FrameworkBundle\EventListener\TestSessionListener">
24-
<argument type="service" id="service_container" />
23+
<service id="test.session.listener" class="Symfony\Component\HttpKernel\EventListener\TestRequestSessionListener">
2524
<tag name="kernel.event_subscriber" />
25+
<argument type="service-locator">
26+
<argument key="session" type="service" id="session" on-invalid="null" />
27+
</argument>
2628
</service>
2729
</services>
2830
</container>

src/Symfony/Bundle/TwigBundle/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
3.3.0
5+
-----
6+
7+
* Deprecated `ContainerAwareRuntimeLoader`
8+
49
2.7.0
510
-----
611

src/Symfony/Bundle/TwigBundle/ContainerAwareRuntimeLoader.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@
1111

1212
namespace Symfony\Bundle\TwigBundle;
1313

14+
@trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use the Twig_ContainerRuntimeLoader class instead.'), ContainerAwareRuntimeLoader::class);
15+
1416
use Psr\Log\LoggerInterface;
1517
use Symfony\Component\DependencyInjection\ContainerInterface;
1618

1719
/**
1820
* Loads Twig extension runtimes via the service container.
1921
*
2022
* @author Fabien Potencier <[email protected]>
23+
*
24+
* @deprecated since version 3.3, will be removed in 4.0. Use \Twig_ContainerRuntimeLoader instead.
2125
*/
2226
class ContainerAwareRuntimeLoader implements \Twig_RuntimeLoaderInterface
2327
{

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

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111

1212
namespace Symfony\Bundle\TwigBundle\DependencyInjection\Compiler;
1313

14+
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
1415
use Symfony\Component\DependencyInjection\ContainerBuilder;
1516
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
16-
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
17+
use Symfony\Component\DependencyInjection\Reference;
1718

1819
/**
1920
* Registers Twig runtime services.
@@ -29,19 +30,9 @@ public function process(ContainerBuilder $container)
2930
$definition = $container->getDefinition('twig.runtime_loader');
3031
$mapping = array();
3132
foreach ($container->findTaggedServiceIds('twig.runtime') as $id => $attributes) {
32-
$def = $container->getDefinition($id);
33-
34-
if (!$def->isPublic()) {
35-
throw new InvalidArgumentException(sprintf('The service "%s" must be public as it can be lazy-loaded.', $id));
36-
}
37-
38-
if ($def->isAbstract()) {
39-
throw new InvalidArgumentException(sprintf('The service "%s" must not be abstract as it can be lazy-loaded.', $id));
40-
}
41-
42-
$mapping[$def->getClass()] = $id;
33+
$mapping[$container->getDefinition($id)->getClass()] = new Reference($id);
4334
}
4435

45-
$definition->replaceArgument(1, $mapping);
36+
$definition->replaceArgument(0, new ServiceLocatorArgument($mapping));
4637
}
4738
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,8 @@
138138
<argument /> <!-- thousands separator, set in TwigExtension -->
139139
</service>
140140

141-
<service id="twig.runtime_loader" class="Symfony\Bundle\TwigBundle\ContainerAwareRuntimeLoader" public="false">
142-
<argument type="service" id="service_container" />
143-
<argument type="collection" /> <!-- the mapping between class names and service names -->
144-
<argument type="service" id="logger" on-invalid="null" />
141+
<service id="twig.runtime_loader" class="Twig_ContainerRuntimeLoader" public="false">
142+
<argument /> <!-- runtime locator -->
145143
</service>
146144
</services>
147145
</container>

src/Symfony/Bundle/TwigBundle/Tests/ContainerAwareRuntimeLoaderTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
use Symfony\Component\DependencyInjection\ContainerInterface;
1616
use Symfony\Bundle\TwigBundle\ContainerAwareRuntimeLoader;
1717

18+
/**
19+
* @group legacy
20+
*/
1821
class ContainerAwareRuntimeLoaderTest extends TestCase
1922
{
2023
public function testLoad()

src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ public function testRuntimeLoader()
244244
$container->compile();
245245

246246
$loader = $container->getDefinition('twig.runtime_loader');
247-
$args = $loader->getArgument(1);
247+
$args = $loader->getArgument(0)->getValues();
248248
$this->assertArrayHasKey('Symfony\Bridge\Twig\Form\TwigRenderer', $args);
249249
$this->assertArrayHasKey('FooClass', $args);
250250
$this->assertContains('twig.form.renderer', $args);

src/Symfony/Bundle/TwigBundle/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"symfony/twig-bridge": "^3.2.1",
2222
"symfony/http-foundation": "~2.8|~3.0",
2323
"symfony/http-kernel": "~2.8.16|~3.1.9|^3.2.2",
24-
"twig/twig": "~1.28|~2.0"
24+
"twig/twig": "^1.32|^2.2"
2525
},
2626
"require-dev": {
2727
"symfony/asset": "~2.8|~3.0",

src/Symfony/Component/HttpKernel/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
CHANGELOG
22
=========
33

4+
3.3.0
5+
-----
6+
7+
* Deprecated `LazyLoadingFragmentHandler::addRendererService()`
8+
* Added `RequestSessionListener`, a concrete implementation of the abstract `SessionListener`
9+
* Added `TestRequestSessionListener`, a concrete implementation of the abstract `TestSessionListener`
10+
411
3.2.0
512
-----
613

src/Symfony/Component/HttpKernel/DependencyInjection/FragmentRendererPass.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111

1212
namespace Symfony\Component\HttpKernel\DependencyInjection;
1313

14+
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
1415
use Symfony\Component\DependencyInjection\ContainerBuilder;
1516
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1617
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
18+
use Symfony\Component\DependencyInjection\Reference;
1719
use Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface;
1820

1921
/**
@@ -43,16 +45,9 @@ public function process(ContainerBuilder $container)
4345
}
4446

4547
$definition = $container->getDefinition($this->handlerService);
48+
$renderers = array();
4649
foreach ($container->findTaggedServiceIds($this->rendererTag) as $id => $tags) {
4750
$def = $container->getDefinition($id);
48-
if (!$def->isPublic()) {
49-
throw new InvalidArgumentException(sprintf('The service "%s" must be public as fragment renderer are lazy-loaded.', $id));
50-
}
51-
52-
if ($def->isAbstract()) {
53-
throw new InvalidArgumentException(sprintf('The service "%s" must not be abstract as fragment renderer are lazy-loaded.', $id));
54-
}
55-
5651
$class = $container->getParameterBag()->resolveValue($def->getClass());
5752

5853
if (!$r = $container->getReflectionClass($class)) {
@@ -63,8 +58,10 @@ public function process(ContainerBuilder $container)
6358
}
6459

6560
foreach ($tags as $tag) {
66-
$definition->addMethodCall('addRendererService', array($tag['alias'], $id));
61+
$renderers[$tag['alias']] = new Reference($id);
6762
}
6863
}
64+
65+
$definition->replaceArgument(0, new ServiceLocatorArgument($renderers));
6966
}
7067
}

src/Symfony/Component/HttpKernel/DependencyInjection/LazyLoadingFragmentHandler.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
namespace Symfony\Component\HttpKernel\DependencyInjection;
1313

14-
use Symfony\Component\DependencyInjection\ContainerInterface;
14+
use Psr\Container\ContainerInterface;
1515
use Symfony\Component\HttpFoundation\RequestStack;
1616
use Symfony\Component\HttpKernel\Fragment\FragmentHandler;
1717

@@ -23,7 +23,11 @@
2323
class LazyLoadingFragmentHandler extends FragmentHandler
2424
{
2525
private $container;
26+
/**
27+
* @deprecated since version 3.3, to be removed in 4.0
28+
*/
2629
private $rendererIds = array();
30+
private $initialized = array();
2731

2832
/**
2933
* Constructor.
@@ -44,9 +48,13 @@ public function __construct(ContainerInterface $container, RequestStack $request
4448
*
4549
* @param string $name The service name
4650
* @param string $renderer The render service id
51+
*
52+
* @deprecated since version 3.3, to be removed in 4.0
4753
*/
4854
public function addRendererService($name, $renderer)
4955
{
56+
@trigger_error(sprintf('The %s() method is deprecated since version 3.3 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED);
57+
5058
$this->rendererIds[$name] = $renderer;
5159
}
5260

@@ -55,10 +63,17 @@ public function addRendererService($name, $renderer)
5563
*/
5664
public function render($uri, $renderer = 'inline', array $options = array())
5765
{
66+
// BC 3.x, to be removed in 4.0
5867
if (isset($this->rendererIds[$renderer])) {
5968
$this->addRenderer($this->container->get($this->rendererIds[$renderer]));
60-
6169
unset($this->rendererIds[$renderer]);
70+
71+
return parent::render($uri, $renderer, $options);
72+
}
73+
74+
if (!isset($this->initialized[$renderer]) && $this->container->has($renderer)) {
75+
$this->addRenderer($this->container->get($renderer));
76+
$this->initialized[$renderer] = true;
6277
}
6378

6479
return parent::render($uri, $renderer, $options);

0 commit comments

Comments
 (0)