Laravel 5.5路由问题:如何获取/folder/后的所有参数
解决Laravel 5.5路由捕获后续完整路径的问题
嘿,这个需求在Laravel里其实很好实现,你只需要给路由参数加上通配规则,就能捕获/folder/之后的所有内容。我给你两种简洁的方案:
方案一:给路由参数添加正则约束
修改你的路由定义,通过->where()方法给param参数设置匹配任意字符(包括斜杠)的正则规则:
Route::get('/folder/{param}', 'PageController@getFolderTree')->where('param', '.*');
之后在控制器的方法里,直接接收$param就能拿到/folder/后面的完整路径:
public function getFolderTree($param) { // 当访问http://example.com/folder/com/example/app时,$param的值就是 "com/example/app" // 如果你确实需要的是例子里的 "example/app",可以做个简单的字符串处理: // $targetPath = substr($param, strpos($param, '/') + 1); dd($param); }
方案二:使用隐式通配符写法(更简洁)
Laravel 5.5支持直接在路由参数里声明通配规则,写法更短,效果和方案一完全一致:
Route::get('/folder/{param:.*}', 'PageController@getFolderTree');
控制器里的参数接收逻辑和方案一一样,不用额外修改。
小提醒
- 为了避免路由冲突,建议把这个路由放在所有路由的最后面,因为Laravel是按照路由定义的顺序匹配的,先匹配到的路由会优先执行。
- 如果你的需求确实是去掉路径的第一段(比如从
com/example/app得到example/app),除了用substr,也可以用explode分割后重组:
$segments = explode('/', $param); array_shift($segments); // 移除第一个分段"com" $targetPath = implode('/', $segments); // 得到"example/app"
内容的提问来源于stack exchange,提问作者Williams Perdana
相关产品推荐
相关产品推荐

