Laravel 5.8项目中如何判断用户是否选中多个复选框
解决方法
你提交的orderCheck会以数组形式传递到后端,只需要统计该数组的元素数量是否大于1即可,实现方式如下:
方法1:直接计数判断
在你的控制器逻辑中替换判断条件即可:
public function prnpriview(Request $request) { if(!empty($request->input('actions'))){ if($request->input('actions')=='print_factors'){ // 获取选中的订单ID数组,没选中时默认返回空数组避免报错 $selectedOrders = $request->input('orderCheck', []); if(count($selectedOrders) > 1) { ... return view('admin.shop.orders.newprint', compact('args')); }else{ return back()->with('error', '请至少选择2个订单进行打印'); } } }else{ return back(); } }
方法2:使用Laravel验证器(更规范)
可以直接利用Laravel的请求验证规则实现校验,不需要手动写判断逻辑,还能自动返回错误提示:
public function prnpriview(Request $request) { // 先做参数校验 $validated = $request->validate([ 'actions' => 'required|in:print_factors', 'orderCheck' => 'required|array|min:2', // 要求orderCheck是数组,最少2个元素 'orderCheck.*' => 'integer|exists:orders,ord_id' // 可选,校验每个选中的ID都是真实存在的订单ID,提升安全性 ], [ 'orderCheck.min' => '请至少选择2个订单进行打印' ]); // 校验通过后直接走业务逻辑 ... return view('admin.shop.orders.newprint', compact('args')); }
原理说明
你将复选框的name属性设置为orderCheck[]后,浏览器提交表单时会把所有勾选的复选框的值组装成数组传递到后端,如果没有勾选任何复选框,orderCheck参数不会被提交,因此用$request->input('orderCheck', [])设置默认空数组可以避免调用count()时报错。
内容的提问来源于stack exchange,提问作者user7424490
相关产品推荐
相关产品推荐

