Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbdaf15d

Browse files
author
Robin Chalas
committed
[FrameworkBundle] Add missing BC layer for deprecated ControllerNameParser injections
1 parentc8f3cef commitbdaf15d

File tree

12 files changed

+103
-24
lines changed

12 files changed

+103
-24
lines changed

‎UPGRADE-4.4.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ DependencyInjection
2525
factory:['@factory_service', method]
2626
```
2727
28+
FrameworkBundle
29+
---------------
30+
31+
* The`$parser` argument of `ControllerResolver::__construct()` and `DelegatingLoader::__construct()`
32+
has been deprecated.
33+
* The `ControllerResolver` and `DelegatingLoader` classes have been marked as `final`.
34+
* The `controller_name_converter` and `resolve_controller_name_subscriber` services have been deprecated.
35+
2836
Messenger
2937
---------
3038

‎UPGRADE-5.0.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ FrameworkBundle
219219
* Removed support for legacy translations directories `src/Resources/translations/` and `src/Resources/<BundleName>/translations/`, use `translations/` instead.
220220
* Support for the legacy directory structure in `translation:update` and `debug:translation` commands has been removed.
221221
* Removed the "Psr\SimpleCache\CacheInterface" / "cache.app.simple" service, use "Symfony\Contracts\Cache\CacheInterface" / "cache.app" instead.
222+
* The `$parser` argument of `ControllerResolver::__construct()` and `DelegatingLoader::__construct()`
223+
has been removed.
224+
* The `ControllerResolver` and `DelegatingLoader` classes have been made `final`.
225+
* The `controller_name_converter` and `resolve_controller_name_subscriber` services have been removed.
226+
222227

223228
HttpFoundation
224229
--------------

‎src/Symfony/Bundle/FrameworkBundle/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+
4.4.0
5+
-----
6+
7+
* Deprecated the`$parser` argument of`ControllerResolver::__construct()` and`DelegatingLoader::__construct()`
8+
* Deprecated the`controller_name_converter` and`resolve_controller_name_subscriber` services
9+
* The`ControllerResolver` and`DelegatingLoader` classes have been marked as`final`
10+
411
4.3.0
512
-----
613

‎src/Symfony/Bundle/FrameworkBundle/Controller/ControllerNameParser.php‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ class ControllerNameParser
2727
{
2828
protected$kernel;
2929

30-
publicfunction__construct(KernelInterface$kernel)
30+
publicfunction__construct(KernelInterface$kernel,bool$triggerDeprecation =true)
3131
{
3232
$this->kernel =$kernel;
33+
34+
if ($triggerDeprecation) {
35+
@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.1.',__CLASS__),E_USER_DEPRECATED);
36+
}
3337
}
3438

3539
/**

‎src/Symfony/Bundle/FrameworkBundle/Controller/ControllerResolver.php‎

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,30 @@
1818

1919
/**
2020
* @author Fabien Potencier <fabien@symfony.com>
21+
*
22+
* @final since Symfony 4.4
2123
*/
2224
class ControllerResolverextends ContainerControllerResolver
2325
{
26+
/**
27+
* @deprecated since Symfony 4.4
28+
*/
2429
protected$parser;
2530

26-
publicfunction__construct(ContainerInterface$container,ControllerNameParser$parser,LoggerInterface$logger =null)
31+
/**
32+
* @param LoggerInterface|null $logger
33+
*/
34+
publicfunction__construct(ContainerInterface$container,$logger =null)
2735
{
28-
$this->parser =$parser;
36+
if ($loggerinstanceof ControllerNameParser) {
37+
@trigger_error(sprintf('Passing a "%s" instance as 2nd argument to "%s()" is deprecated since Symfony 4.4, pass a "%s" instance or null instead.', ControllerNameParser::class,__METHOD__, LoggerInterface::class),E_USER_DEPRECATED);
38+
$this->parser =$logger;
39+
$logger =2 <\func_num_args() ?func_get_arg(2) :null;
40+
}elseif (2 <\func_num_args() &&func_get_arg(2)instanceof ControllerNameParser) {
41+
$this->parser =func_get_arg(2);
42+
}elseif ($logger && !$loggerinstanceof LoggerInterface) {
43+
thrownew \TypeError(sprintf('Argument 2 of "%s()" must be an instance of "%s" or null, "%s" given.',__METHOD__, LoggerInterface::class,\is_object($logger) ?\get_class($logger) :\gettype($logger)),E_USER_DEPRECATED);
44+
}
2945

3046
parent::__construct($container,$logger);
3147
}
@@ -35,7 +51,7 @@ public function __construct(ContainerInterface $container, ControllerNameParser
3551
*/
3652
protectedfunctioncreateController($controller)
3753
{
38-
if (false ===strpos($controller,'::') &&2 ===substr_count($controller,':')) {
54+
if ($this->parser &&false ===strpos($controller,'::') &&2 ===substr_count($controller,':')) {
3955
// controller in the a:b:c notation then
4056
$deprecatedNotation =$controller;
4157
$controller =$this->parser->parse($deprecatedNotation,false);

‎src/Symfony/Bundle/FrameworkBundle/EventListener/ResolveControllerNameSubscriber.php‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,12 @@ class ResolveControllerNameSubscriber implements EventSubscriberInterface
2727
{
2828
private$parser;
2929

30-
publicfunction__construct(ControllerNameParser$parser)
30+
publicfunction__construct(ControllerNameParser$parser,bool$triggerDeprecation =true)
3131
{
32+
if ($triggerDeprecation) {
33+
@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.1.',__CLASS__),E_USER_DEPRECATED);
34+
}
35+
3236
$this->parser =$parser;
3337
}
3438

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
</service>
4747

4848
<serviceid="routing.loader"class="Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader"public="true">
49-
<argumenttype="service"id="controller_name_converter" />
5049
<argumenttype="service"id="routing.resolver" />
5150
<argumenttype="collection" />
51+
<argumenttype="service"id=".legacy_controller_name_converter" /><!-- deprecated since Symfony 4.4-->
5252
</service>
5353

5454
<serviceid="router.default"class="Symfony\Bundle\FrameworkBundle\Routing\Router">

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,21 @@
77
<services>
88
<defaultspublic="false" />
99

10-
<serviceid="controller_name_converter"class="Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser">
10+
<serviceid=".legacy_controller_name_converter"class="Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser">
1111
<tagname="monolog.logger"channel="request" />
1212
<argumenttype="service"id="kernel" />
13+
<argument>false</argument>
14+
</service>
15+
16+
<serviceid="controller_name_converter"alias=".legacy_controller_name_converter">
17+
<deprecated>The "%alias_id%" service is deprecated since Symfony 4.3.</deprecated>
1318
</service>
1419

1520
<serviceid="controller_resolver"class="Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver">
1621
<tagname="monolog.logger"channel="request" />
1722
<argumenttype="service"id="service_container" />
18-
<argumenttype="service"id="controller_name_converter" />
1923
<argumenttype="service"id="logger"on-invalid="ignore" />
24+
<argumenttype="service"id=".legacy_controller_name_converter" />
2025
</service>
2126

2227
<serviceid="argument_metadata_factory"class="Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory" />
@@ -81,10 +86,15 @@
8186
<tagname="kernel.event_subscriber" />
8287
</service>
8388

84-
<serviceid="resolve_controller_name_subscriber"class="Symfony\Bundle\FrameworkBundle\EventListener\ResolveControllerNameSubscriber">
85-
<argumenttype="service"id="controller_name_converter" />
89+
<serviceid=".legacy_resolve_controller_name_subscriber"class="Symfony\Bundle\FrameworkBundle\EventListener\ResolveControllerNameSubscriber">
90+
<argumenttype="service"id=".legacy_controller_name_converter" />
91+
<argument>false</argument>
8692
<tagname="kernel.event_subscriber" />
8793
</service>
94+
<serviceid="resolve_controller_name_subscriber"alias="legacy_resolve_controller_name_subscriber">
95+
<deprecated>The "%alias_id%" service is deprecated since Symfony 4.3.</deprecated>
96+
</service>
97+
8898
<serviceid="disallow_search_engine_index_response_listener"class="Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener">
8999
<tagname="kernel.event_subscriber" />
90100
</service>

‎src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php‎

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,33 @@
2323
* to the fully-qualified form (from a:b:c to class::method).
2424
*
2525
* @author Fabien Potencier <fabien@symfony.com>
26+
*
27+
* @final since Symfony 4.4
2628
*/
2729
class DelegatingLoaderextends BaseDelegatingLoader
2830
{
31+
/**
32+
* @deprecated since Symfony 4.4
33+
*/
2934
protected$parser;
3035
private$loading =false;
3136
private$defaultOptions;
3237

3338
/**
34-
* @paramControllerNameParser $parser A ControllerNameParser instance
35-
* @paramLoaderResolverInterface $resolver A LoaderResolverInterface instance
39+
* @paramLoaderResolverInterface $resolver
40+
* @paramarray $defaultOptions
3641
*/
37-
publicfunction__construct(ControllerNameParser$parser,LoaderResolverInterface$resolver,array$defaultOptions = [])
42+
publicfunction__construct($resolver,$defaultOptions = [])
3843
{
39-
$this->parser =$parser;
44+
if ($resolverinstanceof ControllerNameParser) {
45+
@trigger_error(sprintf('Passing a "%s" instance as first argument to "%s()" is deprecated since Symfony 4.4, pass a "%s" instance instead.', ControllerNameParser::class,__METHOD__, LoaderResolverInterface::class),E_USER_DEPRECATED);
46+
$this->parser =$resolver;
47+
$resolver =$defaultOptions;
48+
$defaultOptions =2 <\func_num_args() ?func_get_arg(2) : [];
49+
}elseif (2 <\func_num_args() &&func_get_arg(2)instanceof ControllerNameParser) {
50+
$this->parser =func_get_arg(2);
51+
}
52+
4053
$this->defaultOptions =$defaultOptions;
4154

4255
parent::__construct($resolver);
@@ -86,7 +99,7 @@ public function load($resource, $type = null)
8699
continue;
87100
}
88101

89-
if (2 ===substr_count($controller,':')) {
102+
if ($this->parser &&2 ===substr_count($controller,':')) {
90103
$deprecatedNotation =$controller;
91104

92105
try {

‎src/Symfony/Bundle/FrameworkBundle/Tests/Controller/ControllerResolverTest.php‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public function testGetControllerWithBundleNotation()
6363
->willReturn('Symfony\Bundle\FrameworkBundle\Tests\Controller\ContainerAwareController::testAction')
6464
;
6565

66-
$resolver =$this->createControllerResolver(null,null,$parser);
66+
$resolver =$this->createLegacyControllerResolver(null,null,$parser);
6767
$request = Request::create('/');
6868
$request->attributes->set('_controller',$shortName);
6969

@@ -105,7 +105,7 @@ class_exists(AbstractControllerTest::class);
105105
$container =newContainer();
106106
$container->set(TestAbstractController::class,$controller);
107107

108-
$resolver =$this->createControllerResolver(null,$container);
108+
$resolver =$this->createLegacyControllerResolver(null,$container);
109109

110110
$request = Request::create('/');
111111
$request->attributes->set('_controller', TestAbstractController::class.'::fooAction');
@@ -127,7 +127,7 @@ class_exists(AbstractControllerTest::class);
127127
$container =newContainer();
128128
$container->set(DummyController::class,$controller);
129129

130-
$resolver =$this->createControllerResolver(null,$container);
130+
$resolver =$this->createLegacyControllerResolver(null,$container);
131131

132132
$request = Request::create('/');
133133
$request->attributes->set('_controller', DummyController::class.'::fooAction');
@@ -176,7 +176,7 @@ class_exists(AbstractControllerTest::class);
176176
$this->assertSame($controllerContainer,$controller->getContainer());
177177
}
178178

179-
protectedfunctioncreateControllerResolver(LoggerInterface$logger =null,Psr11ContainerInterface$container =null,ControllerNameParser$parser =null)
179+
protectedfunctioncreateLegacyControllerResolver(LoggerInterface$logger =null,Psr11ContainerInterface$container =null,ControllerNameParser$parser =null)
180180
{
181181
if (!$parser) {
182182
$parser =$this->createMockParser();
@@ -189,6 +189,15 @@ protected function createControllerResolver(LoggerInterface $logger = null, Psr1
189189
returnnewControllerResolver($container,$parser,$logger);
190190
}
191191

192+
protectedfunctioncreateControllerResolver(LoggerInterface$logger =null,Psr11ContainerInterface$container =null)
193+
{
194+
if (!$container) {
195+
$container =$this->createMockContainer();
196+
}
197+
198+
returnnewControllerResolver($container,$logger);
199+
}
200+
192201
protectedfunctioncreateMockParser()
193202
{
194203
return$this->getMockBuilder('Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser')->disableOriginalConstructor()->getMock();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp