首页 > 解决方案 > 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);
}

}

当我同时选中conditionsnewsletter复选框时,表单数据返回:

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()
    );
}

标签: javascriptphpjquerylaravel

解决方案


尝试这个:

if ($('#contact input[name="newsletter"]:checked')) {
    formData.append(
       "newsletter",
       $('#contact input[name="newsletter"]:checked').val()
   );
} else {
    formData.append(
       "newsletter",
       "off"
    );
}

所以它应该newsletter: off在服务器上。

PS 我建议对复选框使用布尔值。


推荐阅读