Skip to content

Commit 977f65b

Browse files
committed
Fix #9 Add support for optional route parameters (#10)
1 parent cab26ab commit 977f65b

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

src/config.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Invoker\Invoker;
88
use Invoker\ParameterResolver\AssociativeArrayResolver;
99
use Invoker\ParameterResolver\Container\TypeHintContainerResolver;
10+
use Invoker\ParameterResolver\DefaultValueResolver;
1011
use Invoker\ParameterResolver\ResolverChain;
1112
use Slim\Http\Headers;
1213
use Slim\Http\Request;
@@ -62,6 +63,8 @@
6263
new AssociativeArrayResolver,
6364
// Then inject services by type-hints for those that weren't resolved
6465
new TypeHintContainerResolver($c),
66+
// Then fall back on parameters default values for optional route parameters
67+
new DefaultValueResolver(),
6568
];
6669
return new Invoker(new ResolverChain($resolvers), $c);
6770
},

tests/RoutingTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,36 @@ public function injects_request_path_parameters()
4242
$this->assertEquals('Hello matt', $response->getBody()->__toString());
4343
}
4444

45+
/**
46+
* @test
47+
*/
48+
public function injects_optional_path_parameter()
49+
{
50+
$app = new App;
51+
$app->get('/[{name}]', function ($response, $name = null) {
52+
$response->getBody()->write('Hello ' . $name);
53+
return $response;
54+
});
55+
56+
$response = $app->callMiddlewareStack(RequestFactory::create('/matt'), new Response);
57+
$this->assertEquals('Hello matt', (string) $response->getBody());
58+
}
59+
60+
/**
61+
* @test
62+
*/
63+
public function injects_default_value_in_optional_path_parameter()
64+
{
65+
$app = new App;
66+
$app->get('/[{name}]', function ($response, $name = 'john doe') {
67+
$response->getBody()->write('Hello ' . $name);
68+
return $response;
69+
});
70+
71+
$response = $app->callMiddlewareStack(RequestFactory::create('/'), new Response);
72+
$this->assertEquals('Hello john doe', (string) $response->getBody());
73+
}
74+
4575
/**
4676
* @test
4777
*/

0 commit comments

Comments
 (0)