【发布时间】:2021-11-01 02:22:48
【问题描述】:
我想用一个复选框更新我的 laravel 项目中的用户状态。如果我更改数据库中的值,它会显示在我的复选框上。但是,如果我在我的网站中使用表单更改它,状态保持不变。我认为我的控制器可能有问题。有人可以帮忙吗?
在我看来:
<form action="{{ route('users.change_status', $user) }}" class="form" method="post">
{{ csrf_field() }}
@method('PATCH')
<label>body</label>
<input type="checkbox" class="form-control" name="status" value="{{$user->status}}" @if($user->status) checked @endif>
<div class="form-group">
<button type="submit" class="button is-link is-outlined" value="{{$user->status}}" >>Update</button>
</div>
</form>
在我的控制器中:
public function change_status(Request $request, User $user)
{
//dd($user);
// Validate posted form data
$validated = $request->validate([
'status' => 'required',
]);
if (!$validated) { return redirect()->back();}
$user->update($request->all());
return redirect()->back();
}
还有我在 web.php 中的路线:
Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::patch('/change_status/{user}', [UserController::class, 'change_status'])->name('users.change_status');
【问题讨论】:
-
如果你想在
statusPOST 文件中获得复选框的值,那么你必须给它name="status"而不是name="body"。 -
@AdrianKokot 我改了但问题还是一样
-
另外,您不应该设置复选框的
value属性。value应该包含您希望复选框被选中时的值。 -
你的模型是什么样子的?