Laravel 7 - 当可选参数为空时重定向到主页
Laravel 7 - Redirects to the main page when the optional parameter is empty
我在 web.php
中有一个带有可选参数的路由:
我的web.php
:(有问题的路由标出注释)
Route::middleware(['auth', 'dashboard'])->group(function () {
Route::get('/', 'DashboardController@home')->name('root');
Route::prefix('/drivers')->group(function () {
Route::view('/', 'dashboard.driver.main');
Route::post('/', 'UserController@addDriver');
Route::get('/{id}', function ($id) {
if (Auth::user()->can('view_user')) {
$user = User::find($id);
return view('dashboard.user.view', ['user' => $user]);
}
return view('pages.403');
});
//----------------------------------------
// My route with the problem
// ---------------------------------------
Route::get('/driver-dropdown/{q?}', function ($q=null){
return $q;
})->name('driver.dropdown');
});
});
这是我的 dashboard
中间件:
public function handle($request, Closure $next)
{
if(!in_array(\Auth::user()->getOriginal('role'), ['superadmin', 'admin', 'supporter']) )
{
return abort(403);
}
return $next($request);
}
当我输入 host-name/drivers/driver-dropdown/jo
URL 时,我得到 jo
BUT 当我输入 host-name/drivers/driver-dropdown/
URL 时,我将被重定向到 host-name/
,这意味着根路由!
编辑: 已更新 web.php
如果我是正确的,你的分组路线中的 URL 不应以 /
开头,当然主路线除外。我也遇到过这个问题。
应该是这样的:
Route::middleware(['auth', 'dashboard'])->group(function () {
Route::get('/', 'DashboardController@home')->name('root');
Route::prefix('drivers')->group(function () {
Route::get('driver-dropdown/{q?}', function ($q=null){
return $q;
})->name('driver.dropdown');
});
});
您应该像这样重新排序您的路线:
Route::get('/driver-dropdown/{q?}', function ($q=null){
return $q;
})->name('driver.dropdown');
Route::get('/{id}', function ($id) {
if (Auth::user()->can('view_user')) {
$user = User::find($id);
return view('dashboard.user.view', ['user' => $user]);
}
return view('pages.403');
});
目前,当您前往 host-name/drivers/driver-dropdown/
时,它将匹配 /{id}
路线。
我在 web.php
中有一个带有可选参数的路由:
我的web.php
:(有问题的路由标出注释)
Route::middleware(['auth', 'dashboard'])->group(function () {
Route::get('/', 'DashboardController@home')->name('root');
Route::prefix('/drivers')->group(function () {
Route::view('/', 'dashboard.driver.main');
Route::post('/', 'UserController@addDriver');
Route::get('/{id}', function ($id) {
if (Auth::user()->can('view_user')) {
$user = User::find($id);
return view('dashboard.user.view', ['user' => $user]);
}
return view('pages.403');
});
//----------------------------------------
// My route with the problem
// ---------------------------------------
Route::get('/driver-dropdown/{q?}', function ($q=null){
return $q;
})->name('driver.dropdown');
});
});
这是我的 dashboard
中间件:
public function handle($request, Closure $next)
{
if(!in_array(\Auth::user()->getOriginal('role'), ['superadmin', 'admin', 'supporter']) )
{
return abort(403);
}
return $next($request);
}
当我输入 host-name/drivers/driver-dropdown/jo
URL 时,我得到 jo
BUT 当我输入 host-name/drivers/driver-dropdown/
URL 时,我将被重定向到 host-name/
,这意味着根路由!
编辑: 已更新 web.php
如果我是正确的,你的分组路线中的 URL 不应以 /
开头,当然主路线除外。我也遇到过这个问题。
应该是这样的:
Route::middleware(['auth', 'dashboard'])->group(function () {
Route::get('/', 'DashboardController@home')->name('root');
Route::prefix('drivers')->group(function () {
Route::get('driver-dropdown/{q?}', function ($q=null){
return $q;
})->name('driver.dropdown');
});
});
您应该像这样重新排序您的路线:
Route::get('/driver-dropdown/{q?}', function ($q=null){
return $q;
})->name('driver.dropdown');
Route::get('/{id}', function ($id) {
if (Auth::user()->can('view_user')) {
$user = User::find($id);
return view('dashboard.user.view', ['user' => $user]);
}
return view('pages.403');
});
目前,当您前往 host-name/drivers/driver-dropdown/
时,它将匹配 /{id}
路线。