Skip to content

Commit 17991e0

Browse files
author
Jelte Steijaert
committed
Bug #16343 [Router] Too many Routes ?
1 parent e2022ce commit 17991e0

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public function dump(array $options = array())
3838
'base_class' => 'Symfony\\Component\\Routing\\Generator\\UrlGenerator',
3939
), $options);
4040

41+
$routes = $this->generateDeclaredRoutes();
42+
4143
return <<<EOF
4244
<?php
4345
@@ -53,7 +55,7 @@ public function dump(array $options = array())
5355
*/
5456
class {$options['class']} extends {$options['base_class']}
5557
{
56-
private static \$declaredRoutes = {$this->generateDeclaredRoutes()};
58+
private static \$declaredRoutes;
5759
5860
/**
5961
* Constructor.
@@ -62,6 +64,9 @@ public function __construct(RequestContext \$context, LoggerInterface \$logger =
6264
{
6365
\$this->context = \$context;
6466
\$this->logger = \$logger;
67+
if ( null === self::\$declaredRoutes ) {
68+
self::\$declaredRoutes = {$routes};
69+
}
6570
}
6671
6772
{$this->generateGenerateMethod()}

src/Symfony/Component/Routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,21 @@ class PhpGeneratorDumperTest extends \PHPUnit_Framework_TestCase
3434
*/
3535
private $testTmpFilepath;
3636

37+
/**
38+
* @var string
39+
*/
40+
private $largeTestTmpFilepath;
41+
3742
protected function setUp()
3843
{
3944
parent::setUp();
4045

4146
$this->routeCollection = new RouteCollection();
4247
$this->generatorDumper = new PhpGeneratorDumper($this->routeCollection);
4348
$this->testTmpFilepath = sys_get_temp_dir().DIRECTORY_SEPARATOR.'php_generator.'.$this->getName().'.php';
49+
$this->largeTestTmpFilepath = sys_get_temp_dir().DIRECTORY_SEPARATOR.'php_generator.'.$this->getName().'.large.php';
4450
@unlink($this->testTmpFilepath);
51+
@unlink($this->largeTestTmpFilepath);
4552
}
4653

4754
protected function tearDown()
@@ -76,6 +83,33 @@ public function testDumpWithRoutes()
7683
$this->assertEquals($relativeUrlWithoutParameter, '/app.php/testing2');
7784
}
7885

86+
public function testDumpWithTooManyRoutes()
87+
{
88+
$this->routeCollection->add('Test', new Route('/testing/{foo}'));
89+
for ( $i = 0; $i < 32769; ++$i ) {
90+
$this->routeCollection->add('route_'.$i, new Route('/route_'.$i));
91+
}
92+
$this->routeCollection->add('Test2', new Route('/testing2'));
93+
94+
$data = $this->generatorDumper->dump(array(
95+
'class' => 'ProjectLargeUrlGenerator',
96+
));
97+
file_put_contents($this->largeTestTmpFilepath, $data);
98+
include $this->largeTestTmpFilepath;
99+
100+
$projectUrlGenerator = new \ProjectLargeUrlGenerator(new RequestContext('/app.php'));
101+
102+
$absoluteUrlWithParameter = $projectUrlGenerator->generate('Test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_URL);
103+
$absoluteUrlWithoutParameter = $projectUrlGenerator->generate('Test2', array(), UrlGeneratorInterface::ABSOLUTE_URL);
104+
$relativeUrlWithParameter = $projectUrlGenerator->generate('Test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_PATH);
105+
$relativeUrlWithoutParameter = $projectUrlGenerator->generate('Test2', array(), UrlGeneratorInterface::ABSOLUTE_PATH);
106+
107+
$this->assertEquals($absoluteUrlWithParameter, 'http://localhost/app.php/testing/bar');
108+
$this->assertEquals($absoluteUrlWithoutParameter, 'http://localhost/app.php/testing2');
109+
$this->assertEquals($relativeUrlWithParameter, '/app.php/testing/bar');
110+
$this->assertEquals($relativeUrlWithoutParameter, '/app.php/testing2');
111+
}
112+
79113
/**
80114
* @expectedException \InvalidArgumentException
81115
*/

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy