Laravel 组中带或不带参数的路由
Laravel routing with or without parameter in a group
对于我的应用程序,我正在尝试创建一些路由条目。
一个条目用于初始化应用程序,另一个用于 AJAX 请求。
所以如果我输入 https.test.com/app/drive
我的应用程序应该点击 initialise
函数,但如果我想在最后输入一些额外的参数,像这样:https:test.com/app/drive/specificTabA
或 https:test.com/app/drive/specificTabB
问题是,每当我键入 https.test.com/drive/specificTabNameA
时,这都会与我的 AJAX 调用使用的 fetchData
get 路由发生冲突。
如何在点击此 URl https.test.com/app/drive
或点击类似这样的内容时访问初始化函数:https:test.com/app/drive/specificTabA
或 https: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
路由,其中 $param
为 xyz
希望对您有所帮助:)
对于我的应用程序,我正在尝试创建一些路由条目。 一个条目用于初始化应用程序,另一个用于 AJAX 请求。
所以如果我输入 https.test.com/app/drive
我的应用程序应该点击 initialise
函数,但如果我想在最后输入一些额外的参数,像这样:https:test.com/app/drive/specificTabA
或 https:test.com/app/drive/specificTabB
问题是,每当我键入 https.test.com/drive/specificTabNameA
时,这都会与我的 AJAX 调用使用的 fetchData
get 路由发生冲突。
如何在点击此 URl https.test.com/app/drive
或点击类似这样的内容时访问初始化函数:https:test.com/app/drive/specificTabA
或 https: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
路由,其中 $param
为 xyz
希望对您有所帮助:)