8000 bug #27566 [FrameworkBundle] fix for allowing single colon controller… · symfony/symfony@cfb1ffb · GitHub
[go: up one dir, main page]

Skip to content

Commit cfb1ffb

Browse files
committed
bug #27566 [FrameworkBundle] fix for allowing single colon controller notation (dmaicher)
This PR was merged into the 4.1 branch. Discussion ---------- [FrameworkBundle] fix for allowing single colon controller notation | Q | A | ------------- | --- | Branch? | 4.1 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #27522 | License | MIT | Doc PR | - This fixes a BC break introduced in #26085 (review). ping @Tobion Commits ------- 1680674 [FrameworkBundle] fix for allowing single colon controller notation
2 parents 8bbda2c + 1680674 commit cfb1ffb

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ public function load($resource, $type = null)
9494
}
9595

9696
if (1 === substr_count($controller, ':')) {
97-
$controller = str_replace(':', '::', $controller);
98-
@trigger_error(sprintf('Referencing controllers with a single colon is deprecated since Symfony 4.1. Use %s instead.', $controller), E_USER_DEPRECATED);
97+
$nonDeprecatedNotation = str_replace(':', '::', $controller);
98+
@trigger_error(sprintf('Referencing controllers with a single colon is deprecated since Symfony 4.1. Use %s instead.', $nonDeprecatedNotation), E_USER_DEPRECATED);
9999
}
100100

101101
$route->setDefault('_controller', $controller);

src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
use PHPUnit\Framework\TestCase;
66
use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser;
77
use Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader;
8+
use Symfony\Component\Config\Loader\LoaderInterface;
89
use Symfony\Component\Config\Loader\LoaderResolver;
10+
use Symfony\Component\Config\Loader\LoaderResolverInterface;
11+
use Symfony\Component\Routing\Route;
12+
use Symfony\Component\Routing\RouteCollection;
913

1014
class DelegatingLoaderTest extends TestCase
1115
{
@@ -17,4 +21,48 @@ public function testConstructorApi()
1721
new DelegatingLoader($controllerNameParser, new LoaderResolver());
1822
$this->assertTrue(true, '__construct() takes a ControllerNameParser and LoaderResolverInterface respectively as its first and second argument.');
1923
}
24+
25+
/**
26+
* @group legacy
27+
* @expectedDeprecation Referencing controllers with foo:bar:baz is deprecated since Symfony 4.1. Use some_parsed::controller instead.
28+
* @expectedDeprecation Referencing controllers with a single colon is deprecated since Symfony 4.1. Use foo::ba 10000 z instead.
29+
*/
30+
public function testLoad()
31+
{
32+
$controllerNameParser = $this->getMockBuilder(ControllerNameParser::class)
33+
->disableOriginalConstructor()
34+
->getMock();
35+
36+
$controllerNameParser->expects($this->once())
37+
->method('parse')
38+
->with('foo:bar:baz')
39+
->willReturn('some_parsed::controller');
40+
41+
$loaderResolver = $this->getMockBuilder(LoaderResolverInterface::class)
42+
->disableOriginalConstructor()
43+
->getMock();
44+
45+
$loader = $this->getMockBuilder(LoaderInterface::class)->getMock();
46+
47+
$loaderResolver->expects($this->once())
48+
->method('resolve')
49+
->willReturn($loader);
50+
51+
$routeCollection = new RouteCollection();
52+
$routeCollection->add('foo', new Route('/', array('_controller' => 'foo:bar:baz')));
53+
$routeCollection->add('bar', new Route('/', array('_controller' => 'foo::baz')));
54+
$routeCollection->add('baz', new Route('/', array('_controller' => 'foo:baz')));
55+
56+
$loader->expects($this->once())
57+
->method('load')
58+
->willReturn($routeCollection);
59+
60+
$delegatingLoader = new DelegatingLoader($controllerNameParser, $loaderResolver);
61+
62+
$loadedRouteCollection = $delegatingLoader->load('foo');
63+
$this->assertCount(3, $loadedRouteCollection);
64+
$this->assertSame('some_parsed::controller', $routeCollection->get('foo')->getDefault('_controller'));
65+
$this->assertSame('foo::baz', $routeCollection->get('bar')->getDefault('_controller'));
66+
$this->assertSame('foo:baz', $routeCollection->get('baz')->getDefault('_controller'));
67+
}
2068
}

0 commit comments

Comments
 (0)
0