Laravel 如何取消内腔路由中的替代参数

Laravel 如何取消内腔路由中的替代参数,laravel,lumen,Laravel,Lumen,假设我定义了一个路由GET/user/{user\u id}/post/{post\u id}如何在中间件中获取未替换路由?即,如果请求是get/usr/123/post/456,是否有预定义的函数可以获取我/user/{user\u id}/post/{post\u id} 我目前正在使用以下代码段 $urlParam = $request->route()[2]; if (isset($urlParam) && count($urlParam)) {

假设我定义了一个路由
GET/user/{user\u id}/post/{post\u id}
如何在中间件中获取未替换路由?即,如果请求是
get/usr/123/post/456
,是否有预定义的函数可以获取我
/user/{user\u id}/post/{post\u id}

我目前正在使用以下代码段

   $urlParam = $request->route()[2];
   if (isset($urlParam) && count($urlParam)) {
       $urlPath = substr(str_replace(
           array_map(function($item) { return "/" . $item . "/"; }, array_values($urlParam)),
           array_map(function($item) { return "/{" . $item . "}/"; }, array_keys($urlParam)),
           "/" . $request->path() . "/"), 1, -1);
   }
   return $urlPath;

但正如您所看到的,这并不是没有bug的,如果用户id和发布id都相同,那么上面的代码片段将不会生成正确的结果。

在Laravel中

如果您希望获得相同的路由URI,则可以使用

$request->route()->uri();
这将返回
user/{user\u id}/post/{post\u id}

内腔

$segments = $request->segments();

foreach ($request->route()[2] as $parameter => $value) {
    $segment_index = array_search($value, $request->segments());
    $segments[$segment_index] = "{{$parameter}}";
}

$segments = implode('/', $segments);

dd($segments);

结果将是
user/{user_id}/post/{post_id}

虽然这在Laravel中有效,但在Lumen中不起作用。有人知道如何在内腔中做同样的事情吗?