我在这里有一个“奇怪”的情况。我需要以相同的方式处理以下路线:
domain.com/common/p1
domain.com/common/p1/p2
domain.com/common/p1/p2/p3
基本上,这意味着路线应类似于:
Route::get('common/{path}', function ($path) {
//should execute for all paths after common
});
我可以使用任何正则表达式吗?
答案 0 :(得分:2)
查看更多:https://laravel.com/docs/5.8/routing
您可以使用:
Route::get('common/{path}', function ($path) {
//should execute for all paths after common
})->where('path', '(.*)');
希望它能对您有所帮助。
答案 1 :(得分:1)
您正在寻找optional parameters。
您的代码应类似于:
Route::get('common/{path1?}/{path2?}/{path3?}', function ($path1=null, $path2=null, $path3=null) {
//
});
对于无限参数,请使用:
Route::get('common/{path?}', 'Controller@Method')->where('path', '.*');
这将导致控制器方法中的路径数组。
答案 2 :(得分:1)
Laravel路由组件允许除/之外的所有字符。您必须使用where条件正则表达式明确允许/成为占位符的一部分:
Route::get('common/{path}', function ($path) {
//should execute for all paths after common
})->where('path', '.*');
答案 3 :(得分:0)
是的,你可以..
Route::get('common/{path}', function ($path) {
//should execute for all paths after common
})->where('path', 'YOUR REGEX GOES HERE');
答案 4 :(得分:0)
我认为您可以使用以下代码实现这一目标。
Route::any('/common/{args?}', function($args){
$args = explode('/', $args);
// do your code by passing argument to controller
})->where('args', '(.*)');