Skip to content

Commit 2e4df3b

Browse files
committed
allows casting route params
1 parent 3ac975c commit 2e4df3b

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

Readme.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,10 @@ $requestParams = WonderNetwork\SlimKernel\Http\RequestParams::of($serverRequest)
188188
$requestParams->post->requireString('userId');
189189
$requestParams->query->int('limit', 10);
190190
$requestParams->server->bool('HTTPS');
191-
// simpler interface, since route arguments are all string:
192-
WonderNetwork\SlimKernel\Http\RouteArgument::get($serverRequest, 'userId');
193-
WonderNetwork\SlimKernel\Http\RouteArgument::find($serverRequest, 'userId');
194-
WonderNetwork\SlimKernel\Http\RouteArgument::maybe($serverRequest, 'userId');
191+
// route arguments are all string, but you can still cast them to ints
192+
$routeArguments = WonderNetwork\SlimKernel\Http\RouteArgument::of($serverRequest);
193+
$routeArguments->string('token');
194+
$routeArguments->int('limit', 10);
195195
// CLI
196196
$cliParams = WonderNetwork\SlimKernel\Cli\InputParams::ofInput($input);
197197
$cliParams->options
@@ -211,7 +211,7 @@ it throws if it encounters some unexpected input.
211211
arguments and options. Each field is returned as an [Array Accessor](#array-accessor)
212212

213213
* _Route Argument_: created from `RequestInterface` and represent the arguments
214-
matched by slim routing.
214+
matched by slim routing. Returns a single [Array Accessor](#array-accessor)
215215

216216
### Array Accessor
217217

src/Http/RouteArgument.php

+25-14
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,39 @@
66
use Psr\Http\Message\ServerRequestInterface;
77
use Slim\Exception\HttpBadRequestException;
88
use Slim\Routing\RouteContext;
9+
use WonderNetwork\SlimKernel\Accessor\ArrayAccessor;
910

1011
final class RouteArgument {
12+
public static function of(ServerRequestInterface $request): ArrayAccessor {
13+
$route = RouteContext::fromRequest($request)->getRoute();
14+
if (null === $route) {
15+
throw new HttpBadRequestException($request, "Route is not initialized on request");
16+
}
17+
18+
return ArrayAccessor::of(
19+
$route->getArguments(),
20+
fn (string $message) => new HttpBadRequestException($request, $message),
21+
);
22+
}
23+
24+
/**
25+
* @deprecated use self::of($request)->string($name)
26+
*/
1127
public static function maybe(ServerRequestInterface $request, string $name): string {
12-
return self::find($request, $name) ?? '';
28+
return self::of($request)->string($name);
1329
}
1430

31+
/**
32+
* @deprecated use self::of($request)->maybeString($name)
33+
*/
1534
public static function find(ServerRequestInterface $request, string $name): ?string {
16-
$route = RouteContext::fromRequest($request)->getRoute();
17-
if (null === $route) {
18-
throw new HttpBadRequestException(
19-
$request,
20-
"Route is not initialized on request while accessing $name",
21-
);
22-
}
23-
return $route->getArgument($name);
35+
return self::of($request)->maybeString($name);
2436
}
2537

38+
/**
39+
* @deprecated use self::of($request)->requireString($name)
40+
*/
2641
public static function get(ServerRequestInterface $request, string $name): string {
27-
$value = self::find($request, $name);
28-
if (null === $value) {
29-
throw new HttpBadRequestException($request, "Route argument $name not found");
30-
}
31-
return $value;
42+
return self::of($request)->requireString($name);
3243
}
3344
}

0 commit comments

Comments
 (0)