Skip to content

Commit def4d7c

Browse files
committed
Merge branch '2.3' into 2.4
* 2.3: Revert "bug #9601 [Routing] Remove usage of deprecated _scheme requirement (Danez)"
2 parents 439664d + 146e666 commit def4d7c

File tree

14 files changed

+34
-219
lines changed

14 files changed

+34
-219
lines changed

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

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,30 +38,10 @@ public function testRedirectWhenNoSlash()
3838
);
3939
}
4040

41-
public function testSchemeRedirectBC()
42-
{
43-
$coll = new RouteCollection();
44-
$coll->add('foo', new Route('/foo', array(), array('_scheme' => 'https')));
45-
46-
$matcher = new RedirectableUrlMatcher($coll, $context = new RequestContext());
47-
48-
$this->assertEquals(array(
49-
'_controller' => 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction',
50-
'path' => '/foo',
51-
'permanent' => true,
52-
'scheme' => 'https',
53-
'httpPort' => $context->getHttpPort(),
54-
'httpsPort' => $context->getHttpsPort(),
55-
'_route' => 'foo',
56-
),
57-
$matcher->match('/foo')
58-
);
59-
}
60-
6141
public function testSchemeRedirect()
6242
{
6343
$coll = new RouteCollection();
64-
$coll->add('foo', new Route('/foo', array(), array(), array(), '', array('https')));
44+
$coll->add('foo', new Route('/foo', array(), array('_scheme' => 'https')));
6545

6646
$matcher = new RedirectableUrlMatcher($coll, $context = new RequestContext());
6747

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ private function generateDeclaredRoutes()
9292
$properties[] = $route->getRequirements();
9393
$properties[] = $compiledRoute->getTokens();
9494
$properties[] = $compiledRoute->getHostTokens();
95-
$properties[] = $route->getSchemes();
9695

9796
$routes .= sprintf(" '%s' => %s,\n", $name, str_replace("\n", '', var_export($properties, true)));
9897
}
@@ -115,9 +114,9 @@ public function generate(\$name, \$parameters = array(), \$referenceType = self:
115114
throw new RouteNotFoundException(sprintf('Unable to generate a URL for the named route "%s" as such route does not exist.', \$name));
116115
}
117116
118-
list(\$variables, \$defaults, \$requirements, \$tokens, \$hostTokens, \$requiredSchemes) = self::\$declaredRoutes[\$name];
117+
list(\$variables, \$defaults, \$requirements, \$tokens, \$hostTokens) = self::\$declaredRoutes[\$name];
119118
120-
return \$this->doGenerate(\$variables, \$defaults, \$requirements, \$tokens, \$parameters, \$name, \$referenceType, \$hostTokens, \$requiredSchemes);
119+
return \$this->doGenerate(\$variables, \$defaults, \$requirements, \$tokens, \$parameters, \$name, \$referenceType, \$hostTokens);
121120
}
122121
EOF;
123122
}

src/Symfony/Component/Routing/Generator/UrlGenerator.php

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,15 @@ public function generate($name, $parameters = array(), $referenceType = self::AB
137137
// the Route has a cache of its own and is not recompiled as long as it does not get modified
138138
$compiledRoute = $route->compile();
139139

140-
return $this->doGenerate($compiledRoute->getVariables(), $route->getDefaults(), $route->getRequirements(), $compiledRoute->getTokens(), $parameters, $name, $referenceType, $compiledRoute->getHostTokens(), $route->getSchemes());
140+
return $this->doGenerate($compiledRoute->getVariables(), $route->getDefaults(), $route->getRequirements(), $compiledRoute->getTokens(), $parameters, $name, $referenceType, $compiledRoute->getHostTokens());
141141
}
142142

143143
/**
144144
* @throws MissingMandatoryParametersException When some parameters are missing that are mandatory for the route
145145
* @throws InvalidParameterException When a parameter value for a placeholder is not correct because
146146
* it does not match the requirement
147147
*/
148-
protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, array $requiredSchemes = array())
148+
protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens)
149149
{
150150
$variables = array_flip($variables);
151151
$mergedParams = array_replace($defaults, $this->context->getParameters(), $parameters);
@@ -204,24 +204,7 @@ protected function doGenerate($variables, $defaults, $requirements, $tokens, $pa
204204
$schemeAuthority = '';
205205
if ($host = $this->context->getHost()) {
206206
$scheme = $this->context->getScheme();
207-
208-
if ($requiredSchemes) {
209-
$schemeMatched = false;
210-
foreach ($requiredSchemes as $requiredScheme) {
211-
if ($scheme === $requiredScheme) {
212-
$schemeMatched = true;
213-
214-
break;
215-
}
216-
}
217-
218-
if (!$schemeMatched) {
219-
$referenceType = self::ABSOLUTE_URL;
220-
$scheme = current($requiredSchemes);
221-
}
222-
223-
} elseif (isset($requirements['_scheme']) && ($req = strtolower($requirements['_scheme'])) && $scheme !== $req) {
224-
// We do this for BC; to be removed if _scheme is not supported anymore
207+
if (isset($requirements['_scheme']) && ($req = strtolower($requirements['_scheme'])) && $scheme !== $req) {
225208
$referenceType = self::ABSOLUTE_URL;
226209
$scheme = $req;
227210
}

src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -288,15 +288,14 @@ private function compileRoute(Route $route, $name, $supportsRedirections, $paren
288288
EOF;
289289
}
290290

291-
if ($schemes = $route->getSchemes()) {
291+
if ($scheme = $route->getRequirement('_scheme')) {
292292
if (!$supportsRedirections) {
293-
throw new \LogicException('The "schemes" requirement is only supported for URL matchers that implement RedirectableUrlMatcherInterface.');
293+
throw new \LogicException('The "_scheme" requirement is only supported for URL matchers that implement RedirectableUrlMatcherInterface.');
294294
}
295-
$schemes = str_replace("\n", '', var_export(array_flip($schemes), true));
295+
296296
$code .= <<<EOF
297-
\$requiredSchemes = $schemes;
298-
if (!isset(\$requiredSchemes[\$this->context->getScheme()])) {
299-
return \$this->redirect(\$pathinfo, '$name', key(\$requiredSchemes));
297+
if (\$this->context->getScheme() !== '$scheme') {
298+
return \$this->redirect(\$pathinfo, '$name', '$scheme');
300299
}
301300
302301
@@ -314,11 +313,8 @@ private function compileRoute(Route $route, $name, $supportsRedirections, $paren
314313
}
315314
$vars[] = "array('_route' => '$name')";
316315

317-
$code .= sprintf(
318-
" return \$this->mergeDefaults(array_replace(%s), %s);\n",
319-
implode(', ', $vars),
320-
str_replace("\n", '', var_export($route->getDefaults(), true))
321-
);
316+
$code .= sprintf(" return \$this->mergeDefaults(array_replace(%s), %s);\n"
317+
, implode(', ', $vars), str_replace("\n", '', var_export($route->getDefaults(), true)));
322318

323319
} elseif ($route->getDefaults()) {
324320
$code .= sprintf(" return %s;\n", str_replace("\n", '', var_export(array_replace($route->getDefaults(), array('_route' => $name)), true)));

src/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,9 @@ protected function handleRouteRequirements($pathinfo, $name, Route $route)
5656
}
5757

5858
// check HTTP scheme requirement
59-
$scheme = $this->context->getScheme();
60-
$schemes = $route->getSchemes();
61-
if ($schemes && !$route->hasScheme($scheme)) {
62-
return array(self::ROUTE_MATCH, $this->redirect($pathinfo, $name, current($schemes)));
59+
$scheme = $route->getRequirement('_scheme');
60+
if ($scheme && $this->context->getScheme() !== $scheme) {
61+
return array(self::ROUTE_MATCH, $this->redirect($pathinfo, $name, $scheme));
6362
}
6463

6564
return array(self::REQUIREMENT_MATCH, null);

src/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,9 @@ protected function matchCollection($pathinfo, RouteCollection $routes)
103103
}
104104

105105
// check HTTP scheme requirement
106-
if ($requiredSchemes = $route->getSchemes()) {
107-
$scheme = $this->context->getScheme();
108-
109-
if (!$route->hasScheme($scheme)) {
110-
$this->addTrace(sprintf('Scheme "%s" does not match any of the required schemes ("%s"); the user will be redirected to first required scheme', $scheme, implode(', ', $requiredSchemes)), self::ROUTE_ALMOST_MATCHES, $name, $route);
106+
if ($scheme = $route->getRequirement('_scheme')) {
107+
if ($this->context->getScheme() !== $scheme) {
108+
$this->addTrace(sprintf('Scheme "%s" does not match the requirement ("%s"); the user will be redirected', $this->context->getScheme(), $scheme), self::ROUTE_ALMOST_MATCHES, $name, $route);
111109

112110
return true;
113111
}

src/Symfony/Component/Routing/Matcher/UrlMatcher.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ protected function handleRouteRequirements($pathinfo, $name, Route $route)
205205
}
206206

207207
// check HTTP scheme requirement
208-
$scheme = $this->context->getScheme();
209-
$status = $route->getSchemes() && !$route->hasScheme($scheme) ? self::REQUIREMENT_MISMATCH : self::REQUIREMENT_MATCH;
208+
$scheme = $route->getRequirement('_scheme');
209+
$status = $scheme && $scheme !== $this->context->getScheme() ? self::REQUIREMENT_MISMATCH : self::REQUIREMENT_MATCH;
210210

211211
return array($status, null);
212212
}

src/Symfony/Component/Routing/Route.php

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -247,25 +247,6 @@ public function setSchemes($schemes)
247247
return $this;
248248
}
249249

250-
/**
251-
* Checks if a scheme requirement has been set.
252-
*
253-
* @param string $scheme
254-
*
255-
* @return Boolean true if the scheme requirement exists, otherwise false
256-
*/
257-
public function hasScheme($scheme)
258-
{
259-
$scheme = strtolower($scheme);
260-
foreach ($this->schemes as $requiredScheme) {
261-
if ($scheme === $requiredScheme) {
262-
return true;
263-
}
264-
}
265-
266-
return false;
267-
}
268-
269250
/**
270251
* Returns the uppercased HTTP methods this route is restricted to.
271252
* So an empty array means that any method is allowed.

src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,19 +321,17 @@ public function match($pathinfo)
321321

322322
// secure
323323
if ($pathinfo === '/secure') {
324-
$requiredSchemes = array ( 'https' => 0,);
325-
if (!isset($requiredSchemes[$this->context->getScheme()])) {
326-
return $this->redirect($pathinfo, 'secure', key($requiredSchemes));
324+
if ($this->context->getScheme() !== 'https') {
325+
return $this->redirect($pathinfo, 'secure', 'https');
327326
}
328327

329328
return array('_route' => 'secure');
330329
}
331330

332331
// nonsecure
333332
if ($pathinfo === '/nonsecure') {
334-
$requiredSchemes = array ( 'http' => 0,);
335-
if (!isset($requiredSchemes[$this->context->getScheme()])) {
336-
return $this->redirect($pathinfo, 'nonsecure', key($requiredSchemes));
333+
if ($this->context->getScheme() !== 'http') {
334+
return $this->redirect($pathinfo, 'nonsecure', 'http');
337335
}
338336

339337
return array('_route' => 'nonsecure');

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

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -114,37 +114,4 @@ public function testDumpForRouteWithDefaults()
114114

115115
$this->assertEquals($url, '/testing');
116116
}
117-
118-
public function testDumpWithSchemeRequirement()
119-
{
120-
$this->routeCollection->add('Test1', new Route('/testing', array(), array(), array(), '', array('ftp', 'https')));
121-
$this->routeCollection->add('Test2', new Route('/testing_bc', array(), array('_scheme' => 'https'))); // BC
122-
123-
file_put_contents($this->testTmpFilepath, $this->generatorDumper->dump(array('class' => 'SchemeUrlGenerator')));
124-
include ($this->testTmpFilepath);
125-
126-
$projectUrlGenerator = new \SchemeUrlGenerator(new RequestContext('/app.php'));
127-
128-
$absoluteUrl = $projectUrlGenerator->generate('Test1', array(), true);
129-
$absoluteUrlBC = $projectUrlGenerator->generate('Test2', array(), true);
130-
$relativeUrl = $projectUrlGenerator->generate('Test1', array(), false);
131-
$relativeUrlBC = $projectUrlGenerator->generate('Test2', array(), false);
132-
133-
$this->assertEquals($absoluteUrl, 'ftp://localhost/app.php/testing');
134-
$this->assertEquals($absoluteUrlBC, 'https://localhost/app.php/testing_bc');
135-
$this->assertEquals($relativeUrl, 'ftp://localhost/app.php/testing');
136-
$this->assertEquals($relativeUrlBC, 'https://localhost/app.php/testing_bc');
137-
138-
$projectUrlGenerator = new \SchemeUrlGenerator(new RequestContext('/app.php', 'GET', 'localhost', 'https'));
139-
140-
$absoluteUrl = $projectUrlGenerator->generate('Test1', array(), true);
141-
$absoluteUrlBC = $projectUrlGenerator->generate('Test2', array(), true);
142-
$relativeUrl = $projectUrlGenerator->generate('Test1', array(), false);
143-
$relativeUrlBC = $projectUrlGenerator->generate('Test2', array(), false);
144-
145-
$this->assertEquals($absoluteUrl, 'https://localhost/app.php/testing');
146-
$this->assertEquals($absoluteUrlBC, 'https://localhost/app.php/testing_bc');
147-
$this->assertEquals($relativeUrl, '/app.php/testing');
148-
$this->assertEquals($relativeUrlBC, '/app.php/testing_bc');
149-
}
150117
}

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