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

有人能告诉我我做错了什么吗?


回首忆惘然
浏览 190回答 2
2回答

慕雪6442864

有人能告诉我我做错了什么吗?首先,你的 jQuery 代码用处不大:if ($('#contact input[name="newsletter"]:checked')) {&nbsp; &nbsp; formData.append(&nbsp; &nbsp; &nbsp; &nbsp;"newsletter",&nbsp; &nbsp; &nbsp; &nbsp;$('#contact input[name="newsletter"]:checked').val()&nbsp; &nbsp;);} else {&nbsp; &nbsp; formData.append(&nbsp; &nbsp; &nbsp; &nbsp;"newsletter",&nbsp; &nbsp; &nbsp; &nbsp;$('#contact input[name="newsletter"]').val()&nbsp; &nbsp; );}在这两种情况下,您都试图获取value不存在的属性。并且您得到的on只是因为On当<input>标签没有value属性时,将值分配给选中的复选框是浏览器的默认行为。此外,如果您设置该属性,则无论checked复选框的状态如何,您都将始终获得其值;)。自己试试看。接下来,我将使用一个简单的代码,如下所示:formData.append(&nbsp; &nbsp; "newsletter",&nbsp; &nbsp; $('#contact input[name="newsletter"]:checked').length);没有任何条件。在控制器中,您将获得1要么0。然后,在控制器中,您可以这样做:if (!empty(request()->newsletter)) {&nbsp; &nbsp; ...}
打开App,查看更多内容
随时随地看视频慕课网APP