You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何将<object>标签内的B{{$some_y_len+1}}作为请求参数传入控制器?

解决Laravel中Blade模板标签值无法提交到控制器的问题

看起来你遇到的核心问题是:不是标准的表单输入控件,即便你给它加上name属性,浏览器在提交表单时也不会把它的内容作为请求参数发送到服务器——这就是你在控制器里拿到null或者无效值的根本原因。

下面是具体的解决方案和代码调整建议:

方案一:用隐藏输入框存储提交值(最稳妥的方案)

既然你需要把B{{ $some_y_len + 1 }}这个值提交到控制器,直接用<input type="hidden">标签存储是最可靠的方式,因为隐藏域是标准表单控件,会被自动包含在表单提交数据里。

修改你的Blade模板代码:

<div class="alert alert-default" role="alert">
 <h2 style="color: aliceblue;"><strong>+- {{ 7*($some_y_len) }} menit</strong> ({{ $some_y_len}} Antrean)</h2>
 <br>
 No. antrean sekarang : <strong> B{{ $some_y_len + 1 }} </strong><br>
 {{-- 添加隐藏域存储需要提交的排队号 --}}
 <input type="hidden" name="no_some_y" value="B{{ $some_y_len + 1 }}">
 Rata-rata Tiap Antrean : <strong> 9 menit</strong>
</div>

方案二:保留标签的兼容方案(仅特殊场景用)

如果你因为某些业务需求必须保留<object>标签来显示内容,可以用JavaScript在表单提交前,把<object>内的内容赋值给隐藏域再提交:

Blade模板代码:

<div class="alert alert-default" role="alert">
 <h2 style="color: aliceblue;"><strong>+- {{ 7*($some_y_len) }} menit</strong> ({{ $some_y_len}} Antrean)</h2>
 <br>
 No. antrean sekarang :<object id="no_some_y_obj"><strong> B{{ $some_y_len + 1 }} </strong></object><br>
 {{-- 准备隐藏域用于提交 --}}
 <input type="hidden" id="no_some_y_hidden" name="no_some_y" value="">
 Rata-rata Tiap Antrean : <strong> 9 menit</strong>
</div>

<script>
// 监听表单提交事件,提前赋值
document.querySelector('form').addEventListener('submit', function(e) {
  // 获取object标签内的文本并去除前后空格
  const antreValue = document.getElementById('no_some_y_obj').textContent.trim();
  // 把值传给隐藏域
  document.getElementById('no_some_y_hidden').value = antreValue;
});
</script>

额外需要检查的细节

  1. 确保控件在表单内:所有需要提交的元素(包括隐藏域)必须包裹在<form>标签内部,否则浏览器不会提交这些数据。
  2. CSRF令牌和提交方式:Laravel表单必须包含@csrf指令防止CSRF攻击,且表单method需设为POST(对应控制器的store方法)。
  3. 控制器代码修正:你代码里有个小错误——注释掉了$string = $request->service;,导致后续$id计算会报错;另外dd($request->no_samsat);里的no_samsat是未定义的变量,应该改成dd($request->no_some_y);来测试。修正后的控制器片段:
public function store(Request $request) {
 $string = $request->service; // 解开注释,否则$string未定义
 $id = (int)substr($string, 0,2);
 if ($string == "--Select One--"){
 Alert::error('Error', 'Pilihan Layanan Tidak Valid');
 return back();
 } else {
 $no_antre = "";
 if ($id == 1){
 $no_antre = $request->no_some_x;
 } else if ($id == 2) {
 $no_antre = $request->no_some_y;
 // 可以临时加这句测试值是否正确:dd($no_antre);
 } else if ($id == 3) {
 $no_antre = $request->no_some_z;
 } else if ($id == 4) {
 $no_antre = $request->no_some_w;
 }
 dd($request->no_some_y); // 修正变量名
 $user = Auth::user();
 $services = Miniproject::create([
 'instansi_id' => $id,
 'jenis_layanan' => $request->service,
 'user_id' => $user->id,
 'no_antrian' => $no_antre
 ]);
 Alert::success('Success', 'Berhasil Mendapatkan Kode Antrian');
 return redirect('/miniproject');
 }
}

内容的提问来源于stack exchange,提问作者Muhammad Alif Darmamulia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:47:37