在Laravel中定义路线

时间:2019-07-09 06:53:10

标签: php laravel routes

我在这里有一个“奇怪”的情况。我需要以相同的方式处理以下路线:

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
});

我可以使用任何正则表达式吗?

5 个答案:

答案 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', '(.*)');