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 关注
- 246 浏览
添加回答
举报