Skip to content

Commit 63abf57

Browse files
committed
Merge branch '5.2' into 5.x
* 5.2: [HttpClient][PHPDoc] Fix 2 remaining return mixed [Cache] [FrameworkBundle] Fix logging for TagAwareAdapter [Route] Better inline requirements and defaults parsing Simplified condition and removed unused code from AbstractSessionListener::onKernelRequest [PhpUnitBridge] Fix phpunit symlink on Windows [Yaml] Fixed infinite loop when parser goes through an additional and invalid closing tag [Form] Fix 'invalid_message' use in multiple ChoiceType
2 parents 98d89df + 3f0cab2 commit 63abf57

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

Route.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -539,15 +539,15 @@ private function extractInlineDefaultsAndRequirements(string $pattern): string
539539
return $pattern;
540540
}
541541

542-
return preg_replace_callback('#\{(!?\w++)(<.*?>)?(\?[^\}]*+)?\}#', function ($m) {
543-
if (isset($m[3][0])) {
544-
$this->setDefault($m[1], '?' !== $m[3] ? substr($m[3], 1) : null);
542+
return preg_replace_callback('#\{(!?)(\w++)(<.*?>)?(\?[^\}]*+)?\}#', function ($m) {
543+
if (isset($m[4][0])) {
544+
$this->setDefault($m[2], '?' !== $m[4] ? substr($m[4], 1) : null);
545545
}
546-
if (isset($m[2][0])) {
547-
$this->setRequirement($m[1], substr($m[2], 1, -1));
546+
if (isset($m[3][0])) {
547+
$this->setRequirement($m[2], substr($m[3], 1, -1));
548548
}
549549

550-
return '{'.$m[1].'}';
550+
return '{'.$m[1].$m[2].'}';
551551
}, $pattern);
552552
}
553553

Tests/RouteTest.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ public function testPath()
5050
$this->assertEquals($route, $route->setPath(''), '->setPath() implements a fluent interface');
5151
$route->setPath('//path');
5252
$this->assertEquals('/path', $route->getPath(), '->setPath() does not allow two slashes "//" at the beginning of the path as it would be confused with a network path when generating the path from the route');
53+
$route->setPath('/path/{!foo}');
54+
$this->assertEquals('/path/{!foo}', $route->getPath(), '->setPath() keeps ! to pass important params');
55+
$route->setPath('/path/{bar<\w++>}');
56+
$this->assertEquals('/path/{bar}', $route->getPath(), '->setPath() removes inline requirements');
57+
$route->setPath('/path/{foo?value}');
58+
$this->assertEquals('/path/{foo}', $route->getPath(), '->setPath() removes inline defaults');
59+
$route->setPath('/path/{!bar<\d+>?value}');
60+
$this->assertEquals('/path/{!bar}', $route->getPath(), '->setPath() removes all inline settings');
5361
}
5462

5563
public function testOptions()
@@ -221,17 +229,20 @@ public function testInlineDefaultAndRequirement()
221229
$this->assertEquals((new Route('/foo/{bar}'))->setDefault('bar', null), new Route('/foo/{bar?}'));
222230
$this->assertEquals((new Route('/foo/{bar}'))->setDefault('bar', 'baz'), new Route('/foo/{bar?baz}'));
223231
$this->assertEquals((new Route('/foo/{bar}'))->setDefault('bar', 'baz<buz>'), new Route('/foo/{bar?baz<buz>}'));
224-
$this->assertEquals((new Route('/foo/{!bar}'))->setDefault('!bar', 'baz<buz>'), new Route('/foo/{!bar?baz<buz>}'));
232+
$this->assertEquals((new Route('/foo/{!bar}'))->setDefault('bar', 'baz<buz>'), new Route('/foo/{!bar?baz<buz>}'));
225233
$this->assertEquals((new Route('/foo/{bar}'))->setDefault('bar', 'baz'), new Route('/foo/{bar?}', ['bar' => 'baz']));
226234

227235
$this->assertEquals((new Route('/foo/{bar}'))->setRequirement('bar', '.*'), new Route('/foo/{bar<.*>}'));
228236
$this->assertEquals((new Route('/foo/{bar}'))->setRequirement('bar', '>'), new Route('/foo/{bar<>>}'));
229237
$this->assertEquals((new Route('/foo/{bar}'))->setRequirement('bar', '\d+'), new Route('/foo/{bar<.*>}', [], ['bar' => '\d+']));
230238
$this->assertEquals((new Route('/foo/{bar}'))->setRequirement('bar', '[a-z]{2}'), new Route('/foo/{bar<[a-z]{2}>}'));
239+
$this->assertEquals((new Route('/foo/{!bar}'))->setRequirement('bar', '\d+'), new Route('/foo/{!bar<\d+>}'));
231240

232241
$this->assertEquals((new Route('/foo/{bar}'))->setDefault('bar', null)->setRequirement('bar', '.*'), new Route('/foo/{bar<.*>?}'));
233242
$this->assertEquals((new Route('/foo/{bar}'))->setDefault('bar', '<>')->setRequirement('bar', '>'), new Route('/foo/{bar<>>?<>}'));
234243

244+
$this->assertEquals((new Route('/{foo}/{!bar}'))->setDefaults(['bar' => '<>', 'foo' => '\\'])->setRequirements(['bar' => '\\', 'foo' => '.']), new Route('/{foo<.>?\}/{!bar<\>?<>}'));
245+
235246
$this->assertEquals((new Route('/'))->setHost('{bar}')->setDefault('bar', null), (new Route('/'))->setHost('{bar?}'));
236247
$this->assertEquals((new Route('/'))->setHost('{bar}')->setDefault('bar', 'baz'), (new Route('/'))->setHost('{bar?baz}'));
237248
$this->assertEquals((new Route('/'))->setHost('{bar}')->setDefault('bar', 'baz<buz>'), (new Route('/'))->setHost('{bar?baz<buz>}'));

0 commit comments

Comments
 (0)