如何在Blade模板中通过a标签将多个变量传递到Controller控制器
场景1:仅传递页面初始加载的默认日期值
如果你不需要处理用户修改日期输入框的场景,只需要传递页面渲染时预设的当前日期,直接在Blade中拼接查询参数即可:
<a href="{{ url('/totalsales?from='.date('Y-m-d').'&to='.date('Y-m-d')) }}">查询销售汇总</a>
后端可以直接通过Request实例获取参数:
// Controller 代码 public function getTotalSales(Request $request) { $from = $request->input('from'); $to = $request->input('to'); // 后续业务逻辑处理 }
场景2:支持用户修改日期后动态传递最新值
Blade是服务端渲染模板,页面渲染完成后无法直接获取用户在前端修改的输入框值,需要配合JavaScript动态更新a标签的href属性:
- 先给输入框和a标签增加ID标识,方便DOM选择:
<input type="date" class="form-control" id="date_from" name="from" value="{{ date('Y-m-d') }}"> <input type="date" class="form-control" id="date_to" name="to" value="{{ date('Y-m-d') }}"> <a href="javascript:void(0)" id="sales_query_link">查询销售汇总</a>
- 增加JavaScript代码监听日期变化,动态更新跳转链接:
document.addEventListener('DOMContentLoaded', () => { const fromEl = document.getElementById('date_from'); const toEl = document.getElementById('date_to'); const linkEl = document.getElementById('sales_query_link'); const updateLink = () => { const fromVal = fromEl.value; const toVal = toEl.value; // 可选:增加日期间隔合法性校验 if (fromVal && toVal && new Date(toVal) >= new Date(fromVal)) { linkEl.href = `/totalsales?from=${fromVal}&to=${toVal}`; } else { linkEl.removeAttribute('href'); alert('请选择合法的日期间隔,结束日期不能早于开始日期'); } } // 页面初始化时先赋值一次默认链接 updateLink(); // 监听日期输入变化 fromEl.addEventListener('change', updateLink); toEl.addEventListener('change', updateLink); })
- 后端接收逻辑和场景1一致,建议增加参数校验:
public function getTotalSales(Request $request) { $validated = $request->validate([ 'from' => 'required|date', 'to' => 'required|date|after_or_equal:from', ]); // 使用$validated['from']和$validated['to']处理业务逻辑 }
如果你希望用路由参数而非Query String传递参数,只需要将路由定义为
Route::get('/totalsales/{from}/{to}', [SalesController::class, 'getTotalSales']),对应拼接href时格式改为/totalsales/${fromVal}/${toVal}即可。
内容的提问来源于stack exchange,提问作者Molla
相关产品推荐
相关产品推荐

