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

Commita2b79e1

Browse files
committed
feature#31739 [FrameworkBundle] Add missing BC layer for deprecated ControllerNameParser injections (chalasr)
This PR was merged into the 4.4 branch.Discussion----------[FrameworkBundle] Add missing BC layer for deprecated ControllerNameParser injections| Q | A| ------------- | ---| Branch? | 4.4| Bug fix? | no| New feature? | no| BC breaks? | no| Deprecations? | yes| Tests pass? | yes| Fixed tickets | n/a| License | MIT| Doc PR | n/aAllows removing the `ControllerNameParser` class and corresponding `controller_name_converter` service in 5.0.Should have been done in 4.1, better late than never.Commits-------1f37275 [FrameworkBundle] Add missing BC layer for deprecated ControllerNameParser injections
2 parents852fb36 +1f37275 commita2b79e1

File tree

12 files changed

+98
-24
lines changed

12 files changed

+98
-24
lines changed

‎UPGRADE-4.4.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ HttpClient
3030
3131
* Added method`cancel()` to `ResponseInterface`
3232

33+
FrameworkBundle
34+
---------------
35+
36+
* The `$parser` argument of `ControllerResolver::__construct()` and `DelegatingLoader::__construct()`
37+
has been deprecated.
38+
* The `ControllerResolver` and `DelegatingLoader` classes have been marked as `final`.
39+
* The `controller_name_converter` and `resolve_controller_name_subscriber` services have been deprecated.
40+
3341
Messenger
3442
---------
3543

‎UPGRADE-5.0.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,10 @@ HttpClient
225225
----------
226226

227227
* Added method `cancel()` to `ResponseInterface`
228+
* The `$parser` argument of `ControllerResolver::__construct()` and `DelegatingLoader::__construct()`
229+
has been removed.
230+
* The `ControllerResolver` and `DelegatingLoader` classes have been made `final`.
231+
* The `controller_name_converter` and `resolve_controller_name_subscriber` services have been removed.
228232

229233
HttpFoundation
230234
--------------

‎src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ CHANGELOG
55
-----
66

77
* Deprecated support for`templating` engine in`TemplateController`, use Twig instead
8+
* Deprecated the`$parser` argument of`ControllerResolver::__construct()` and`DelegatingLoader::__construct()`
9+
* Deprecated the`controller_name_converter` and`resolve_controller_name_subscriber` services
10+
* The`ControllerResolver` and`DelegatingLoader` classes have been marked as`final`
811

912
4.3.0
1013
-----

‎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