Laravel 组中带或不带参数的路由

Laravel routing with or without parameter in a group

对于我的应用程序,我正在尝试创建一些路由条目。 一个条目用于初始化应用程序,另一个用于 AJAX 请求。

所以如果我输入 https.test.com/app/drive 我的应用程序应该点击 initialise 函数,但如果我想在最后输入一些额外的参数,像这样:https:test.com/app/drive/specificTabAhttps:test.com/app/drive/specificTabB

问题是,每当我键入 https.test.com/drive/specificTabNameA 时,这都会与我的 AJAX 调用使用的 fetchData get 路由发生冲突。

如何在点击此 URl https.test.com/app/drive 或点击类似这样的内容时访问初始化函数:https:test.com/app/drive/specificTabAhttps:test.com/app/drive/specificTabB?

Route::group(['prefix' => 'drive'], function () {
    Route::get('', 'CustomController@initialise');
    Route::get('fetchData', 'CustomController@fetchData');
});

朋友,我想让你注意 Laravel 文档 https://laravel.com/docs/5.0/routing#route-parameters,尤其是这个路由参数。你可以告诉路由器这条路由可以有参数也可以没有。看这个例子

Route::get('/{specific?}')

现在您可以在请求后在控制器函数中获取此特定参数

public function initialize (Request $request, $specific = null)

将它默认设置为空,因为这个参数既可以是过去的也可以不是,所以它应该有一些默认值。 祝你好运 ;)

以下应该适合您:

Route::group(['prefix' => 'drive'], function () {
    Route::get('fetchData', 'CustomController@fetchData');

    Route::get('{path?}', 'CustomController@initialise')->where(['path' => '.*']);
});

这将允许以下路径:

/drive => initialise

/drive/1 => initalize

/drive/1/2/3 => initalize

/drive/fetchData => fetchData

添加 ->where(['path' => '.*']) 会将任何路径路由到 initalize,例如/1, /1/2, /1/2/3.

如果您只想让路径有一层深度,您可以删除 where:

Route::get('{path?}', 'CustomController@initialise');

我做了一些测试,结果如下conclusion/solution:

Route::group(['prefix' => 'drive'], function () {
    Route::get('fetchData', 'CustomController@fetchData');
    Route::get('{param?}', 'CustomController@initialise');
});

客户控制器:

function initialise($param = null) 
{
    ...
}

请注意,通过更改路线的顺序,您实际上会加载正确的路线。

当您访问 /drive/fetchData 时,它将加载 fetchData 路由

当您访问 /drive/ 时,它将加载 initialise 没有参数的路由

当您访问 /drive/xyz 时,它将加载 initialise 路由,其中​​ $paramxyz

希望对您有所帮助:)