javascript - PHP Laravel如何检查控制器中是否选中了复选框
问题描述
我正在构建一个laravel
连接mailchimp
到联系表单的应用程序。用户必须接受条件并且有可能通过选中复选框来接收新闻通讯。现在,当用户同时接受条件和时事通讯时,表单提交成功,但是当用户没有选中时事通讯复选框时,表单没有提交,我真的不知道为什么。
这里输入
<input name="conditions" value="1" type="checkbox" class="custom-control-input" id="applyConditions" required>
<input type="checkbox" name="newsletter" class="custom-control-input" id="contactNewsletterSubscribe">
和我的控制器:
class ContactController extends Controller
{
public function store()
{
$validator = Validator::make(request()->all(), [
'email' => ['required', 'email'],
'name' => ['required', 'string'],
'phone' => ['string'],
'subject' => ['required', 'string'],
'message' => ['required', 'string'],
'conditions' => ['accepted', 'boolean'],
]);
if ($validator->fails()) {
return response()
->json($validator->messages(), 400);
}
if (request()->has('newsletter')) {
Newsletter::subscribePending(request()->email);
if (!Newsletter::lastActionSucceeded()) {
return response()
->json($validator->messages(), 400);
}
}
Mail::to('my@mail.com')
->send(new ContactUsMessage([
'email' => request()->email,
'name' => request()->name,
'phone' => request()->phone,
'subject' => request()->subject,
'message' => request()->message,
]));
return response()->json('OK', 200);
}
}
当我同时选中conditions
和newsletter
复选框时,表单数据返回:
conditions: 1
newsletter: on
当接受条件但未选中时事通讯复选框时,表单数据返回:
conditions: 1
newsletter: undefined
有人可以告诉我我做错了什么吗?
编辑
我正在使用 jquery/axios 发送表单数据:
if ($('#contact input[name="newsletter"]:checked')) {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]:checked').val()
);
} else {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]').val()
);
}
解决方案
尝试这个:
if ($('#contact input[name="newsletter"]:checked')) {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]:checked').val()
);
} else {
formData.append(
"newsletter",
"off"
);
}
所以它应该newsletter: off
在服务器上。
PS 我建议对复选框使用布尔值。
推荐阅读
- sql - SQL JOIN ON(有两个条件)
- c# - 使用 Unity 的 MVC 控制器构造函数注入中的工作单元和存储库模式不对数据库进行任何更改
- perl - Perl 中的 OS 页面对齐分配
- azure - Docker 上的 Azure CosmosDB 模拟器不生成证书
- javascript - ReactJS 类组件使用 contenteditable 元素渲染 array.map
- javascript - 注册表单上的 asp.net + asp:button、HTML 和 Javascript 存在问题
- javascript - Symfony 3/4:通过 AJAX 从数据库中删除表行
- powershell - 使用 Where-Object 打开文件
- firebase - 在特定时间对谷歌通知的操作
- ios - 旧项目停止使用最新的模拟器更新进行构建