laravel 6呼叫post路由返回同一页面进行排序表
我正在尝试创建一个用户可以排序的表 我创建了以下两条路线laravel 6呼叫post路由返回同一页面进行排序表,laravel,sorting,post,get,Laravel,Sorting,Post,Get,我正在尝试创建一个用户可以排序的表 我创建了以下两条路线 route::get('/manager', 'Manager\DeadlineController@index')->middleware(['auth', 'auth.manager'])->name('manager.index'); route::post('/manager/{name_id}', 'Manager\DeadlineController@sortByName')->middleware
route::get('/manager', 'Manager\DeadlineController@index')->middleware(['auth', 'auth.manager'])->name('manager.index');
route::post('/manager/{name_id}', 'Manager\DeadlineController@sortByName')->middleware(['auth', 'auth.manager'])->name('manager.sortByName');
从我的php artisan路线:列表
| | GET|HEAD | manager | manager.index | App\Http\Controllers\Manager\DeadlineController@index | web,auth,auth.manager |
| | POST | manager/{name_id} | manager.sortByName | App\Http\Controllers\Manager\DeadlineController@sortByName | web,auth,auth.manager |
并按如下方式设置我的控制器
public function index()
{
return view('deadline.index')
->with([
'modules' => Module::all(),
'name_id' => 0
]);
}
public function sortByName($name_id){
if($name_id == 0){
$sortedModule = Module::orderBy('name', 'DESC')->get();
}
else{
$sortedModule = Module::orderBy('name', 'ASC')->get();
}
return view('deadline.index')
->with([
'modules' => $sortedModule,
'name_id' => 1
]);
}
在我看来,我使用以下链接进行排序
<th scope="col"><a href="{{ route('manager.sortByName', $name_id) }}">NAME</a></th>
我错过了什么或做错了什么?任何帮助或提示都将不胜感激。请询问我是否需要提供更多细节
更新
我将视图中的链接更改为带有提交按钮的表单标签,现在它可以工作了
<th scope="col">
<form action="{{ route('manager.sortByName', $name_id) }}" method="POST">
@csrf
<button type="submit">NAAM</button>
</form>
</th>
@csrf
纳姆
当您单击标签时,它确实收到了请求,因此您需要更改从POST到GET的路线,同时返回视图作为对POST的响应方法也不是一个好主意,最好的解决方案是GET route我将a标签更改为表单标签,现在它可以工作了。为什么将视图作为对POST方法的响应返回是一个坏主意?只要尝试刷新页面,您就会看到警报,如果您接受再次发送数据,这将导致表单提交两次,因此,如果您有类似于付款或发送邮件的内容,它将在刷新时运行两次。你必须避免这样
<th scope="col">
<form action="{{ route('manager.sortByName', $name_id) }}" method="POST">
@csrf
<button type="submit">NAAM</button>
</form>
</th>