我想使用復選框更新我的 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 hljs-string">">
<button type="submit" hljs-string">" 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');
uj5u.com熱心網友回復:
您應該將 status 屬性添加到 User 模型上的可填充陣列
protected $fillable = ['status',...other properties];
uj5u.com熱心網友回復:
首先在您的代碼中,您有一些垃圾郵件(在控制器中)和一些語法錯誤(在 html 中)。
html
額外>的按鈕,更改為:
<button type="submit" class="button is-link is-outlined" value="{{$user->status}}" >Update</button>
控制器
您不需要評估對新變數的驗證,因為驗證如果有 errorm 會自動回傳請求,因此您不需要 if 陳述句并且 update 方法接受陣列作為輸入,將代碼更改為:
$request->validate([
'status' => 'required',
]);
$user->update([$request->all()]);
如果您的狀態列(在資料庫中)是布林值,則您最常更改狀態請求,因為已選中on和取消選中的復選框值是, null因此您最常使用以下代碼:
$request->validate([
'status' => 'required',
]);
if(isset($request->status)){
$status = true;
}else{
$status = false;
}
$user->update([
'status' => $status,
]);
這將是可行的,否則,請檢查您的模型可填充并將狀態欄位添加到其中:
protected $fillable = ['status',...];
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344442.html
