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中不起作用。有人知道如何在内腔中做同样的事情吗?