Laravel 重定向到错误的路线
Laravel redirecting to the wrong route
web.php
Route::get('/gigs/{id}', [GigsController::class, 'info'])->name('clientside.gigs_info');
Route::get('/gigs/create', [GigsController::class, 'create'])->name('clientside.gigs.create');
控制器
public function create()
{
$categories = Category::select('id', 'name')->get();
return view('clientview.gigs.create', compact('categories'));
}
public function info($id)
{
$gig = Gigs::join('users', 'users.id', '=', 'gigs.created_by')
->join('categories', 'categories.id', '=', 'gigs.category_id')
->select('gigs.*', 'categories.name as category_name', 'users.name as user_name', 'users.surname')
->where('gigs.id', '=', $id)
->orderBy('name', 'ASC')
->firstOrFail();
return view('clientview.gigs.info', compact('gig'));
}
当我尝试点击这个时:
<a class="dropdown-item" href="{{ route('clientside.gigs.create') }}">Create Gigs</a>
当我单击它时,我可以从 DebugBar 观察到它指向路由 ('clientside.gigs_info')
我认为“/create”认为它是一个 /{ID} 但是,我指向不同的路线
Michael Mano 的回答,
确保在动态之前写 web.php 静态路由。
create route就写在info route之前因为是动态路由(接受参数)所以动态路由总是写在静态路由之后
您实际上创建了一个动态路由 gigs/{id} 因此 gigs 之后的任何内容都将作为 gigs 的参数被调用。因此,要解决此问题,请更改 web.php 中的顺序,如下所示。所以它会先搜索静态路由,然后再去寻找动态路由。
Route::get('/gigs/create', [GigsController::class, 'create'])->name('clientside.gigs.create');
Route::get('/gigs/{id}', [GigsController::class, 'info'])->name('clientside.gigs_info');
web.php
Route::get('/gigs/{id}', [GigsController::class, 'info'])->name('clientside.gigs_info');
Route::get('/gigs/create', [GigsController::class, 'create'])->name('clientside.gigs.create');
控制器
public function create()
{
$categories = Category::select('id', 'name')->get();
return view('clientview.gigs.create', compact('categories'));
}
public function info($id)
{
$gig = Gigs::join('users', 'users.id', '=', 'gigs.created_by')
->join('categories', 'categories.id', '=', 'gigs.category_id')
->select('gigs.*', 'categories.name as category_name', 'users.name as user_name', 'users.surname')
->where('gigs.id', '=', $id)
->orderBy('name', 'ASC')
->firstOrFail();
return view('clientview.gigs.info', compact('gig'));
}
当我尝试点击这个时:
<a class="dropdown-item" href="{{ route('clientside.gigs.create') }}">Create Gigs</a>
当我单击它时,我可以从 DebugBar 观察到它指向路由 ('clientside.gigs_info') 我认为“/create”认为它是一个 /{ID} 但是,我指向不同的路线
Michael Mano 的回答, 确保在动态之前写 web.php 静态路由。
create route就写在info route之前因为是动态路由(接受参数)所以动态路由总是写在静态路由之后
您实际上创建了一个动态路由 gigs/{id} 因此 gigs 之后的任何内容都将作为 gigs 的参数被调用。因此,要解决此问题,请更改 web.php 中的顺序,如下所示。所以它会先搜索静态路由,然后再去寻找动态路由。
Route::get('/gigs/create', [GigsController::class, 'create'])->name('clientside.gigs.create'); Route::get('/gigs/{id}', [GigsController::class, 'info'])->name('clientside.gigs_info');