Skip to content

Commit b865a0f

Browse files
Merge pull request #164 from radiate-framework/bugfix/route-parameters
added route parameters back into route and request
2 parents 22d5f79 + 53adf82 commit b865a0f

4 files changed

Lines changed: 94 additions & 9 deletions

File tree

src/Http/Request.php

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ class Request extends WP_REST_Request implements Arrayable, Jsonable, JsonSerial
3838
*/
3939
protected $userResolver;
4040

41+
/**
42+
* The route resolver
43+
*
44+
* @var \Closure
45+
*/
46+
protected $routeResolver;
47+
4148
/**
4249
* Create the request instance
4350
*
@@ -94,6 +101,7 @@ public static function createFrom(self $from, ?Request $to = null)
94101
$request->set_cookie_params($from->get_cookie_params());
95102
$request->set_server_params($from->get_server_params());
96103
$request->setUserResolver($from->getUserResolver());
104+
$request->setRouteResolver($from->getRouteResolver());
97105

98106
return $request;
99107
}
@@ -196,19 +204,46 @@ public function get_cookie_params(): array
196204
}
197205

198206
/**
199-
* Get the request route parameters
207+
* Get the request route
200208
*
201-
* @param string|null $key
209+
* @param string|null $parameters
202210
* @param mixed|null $default
203-
* @return mixed
211+
* @return \Radiate\Routing\Route|mixed
204212
*/
205-
public function route(?string $key = null, $default = null)
213+
public function route(?string $parameter = null, $default = null)
206214
{
207-
if ($key) {
208-
return $this->get_url_params()[$key] ?? $default;
215+
$route = call_user_func($this->getRouteResolver());
216+
217+
if (is_null($route) || is_null($parameter)) {
218+
return $route;
209219
}
210220

211-
return $this->get_url_params();
221+
return $route->parameter($parameter, $default);
222+
}
223+
224+
/**
225+
* Set the route resolver
226+
*
227+
* @param \Closure $resolver
228+
* @return self
229+
*/
230+
public function setRouteResolver(Closure $resolver)
231+
{
232+
$this->routeResolver = $resolver;
233+
234+
return $this;
235+
}
236+
237+
/**
238+
* Get the route resolver
239+
*
240+
* @return \Closure
241+
*/
242+
public function getRouteResolver()
243+
{
244+
return $this->routeResolver ?: function () {
245+
//
246+
};
212247
}
213248

214249
/**

src/Routing/AjaxRoute.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public function dispatch(Request $request)
3131
public function handle(Request $request)
3232
{
3333
return function () use ($request) {
34+
$request->setRouteResolver(function () {
35+
return $this;
36+
});
37+
3438
$response = $this->runRequestThroughStack($request);
3539

3640
static::toResponse($response)->send();

src/Routing/RestRoute.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ public function dispatch(Request $request)
3333
public function handle(Request $request)
3434
{
3535
return function (WP_REST_Request $wpRequest) {
36-
$request = Request::createFromBase($wpRequest);
36+
$request = Request::createFromBase($wpRequest)
37+
->setRouteResolver(function () {
38+
return $this;
39+
});
40+
41+
$this->parameters = $request->get_url_params();
3742

3843
$response = $this->runRequestThroughStack($request);
3944

src/Routing/Route.php

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ abstract class Route
6767
*/
6868
protected $attributes;
6969

70+
/**
71+
* The route parameters
72+
*
73+
* @var array
74+
*/
75+
protected $parameters = [];
76+
7077
/**
7178
* Create the route instance
7279
*
@@ -267,7 +274,7 @@ protected function runRequestThroughStack(Request $request)
267274
->then(function ($request) {
268275
$this->app->instance('request', $request);
269276

270-
return $this->app->call($this->action());
277+
return $this->app->call($this->action(), $this->parameters());
271278
});
272279
} catch (Throwable $e) {
273280
$response = $this->app->renderException($request, $e);
@@ -338,6 +345,40 @@ protected function gatherMiddleware()
338345
return array_unique($middleware);
339346
}
340347

348+
/**
349+
* Get the route parameters
350+
*
351+
* @return array
352+
*/
353+
public function parameters()
354+
{
355+
return $this->parameters;
356+
}
357+
358+
/**
359+
* Get a route parameter
360+
*
361+
* @param string $key
362+
* @param mixed|null $default
363+
* @return mixed
364+
*/
365+
public function parameter(string $key, $default = null)
366+
{
367+
return $this->parameters[$key] ?? $default;
368+
}
369+
370+
/**
371+
* Set a parameter
372+
*
373+
* @param string $key
374+
* @param mixed $value
375+
* @return void
376+
*/
377+
public function setParameter(string $key, $value)
378+
{
379+
$this->parameters[$key] = $value;
380+
}
381+
341382
/**
342383
* Dispatch the request to the route
343384
*

0 commit comments

Comments
 (0)