3 回答

TA貢獻1712條經驗 獲得超3個贊
當您使用時request()->has('favorited')
,它會true
在請求包含輸入favorited=1
或favorited=0
(兩種情況)時返回。
它確實適用于復選框,因為當type="checkbox"
未選中輸入時,它不會在請求中發送。
當它是 inputtype="hidden"
時,favorited
將一直出現在請求中。
你應該把它改成 'favorited' => (int)(bool)request()->input('favorited')

TA貢獻1831條經驗 獲得超4個贊
根據Laravel 文檔 $request->has('favorited')
檢查favorited
請求中是否存在。無論是設置為 0、1 還是任何其他值都不會影響返回值。
相反,使用(bool)$request->input('favorited')
應該工作。或者,如果您沒有將favorited
屬性轉換為 boolean (bool)$request->input('favorited') ? 1 : 0
。
如果這不起作用,則說明請求中的值設置不正確,因此很可能是前端問題。在這種情況下,dd($request->input('favorited'))
查看該值是否按預期存在。我沒有立即看到您的視圖和 js 存在問題。

TA貢獻1876條經驗 獲得超5個贊
歡迎來到 Stack Overflow。
您的問題出在前端和后端:
后端:request()->has('field'); 請求將始終具有此字段,這意味著它的值始終為1,因為您提供了輸入字段。
前端:您沒有更改輸入的值。
對此有兩個修復: 1. 前端您可以設置 Javascript 以在您按下此鍵時更改輸入值。
在后端執行與 #1 相同的操作,這樣更容易。
所以,這應該適合你:
// First validate you have that field.
request()->validate([
'favorited' => ['required'],
]);
// Then set the favorited to opposite of current.
$task->update([
'favorited' => !$task->favorited // notice the "!" (take oposite value)
]);
編輯:順便說一句,您可以通過刪除隱藏輸入并提交您想要使用的值來擺脫 Javascript,因為它是 0 或 1。
所以:刪除輸入類型=“隱藏”,并從a-href更改為按鈕。
<button name="favorited">
<i class="{{ $task->favorited ? 'text-gold fas' : 'far' }} fa-star"></i>
</button>
那應該做的事情。
- 3 回答
- 0 關注
- 279 瀏覽
添加回答
舉報