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

Laravel中Trait方法提交表单不执行仅页面刷新问题咨询

问题根因

方法不执行、页面仅刷新的核心原因是表单配置错误,请求根本没有命中你定义的POST路由:

  • HTML的<form>标签默认提交方法为GET,你路由注册的是POST请求方法,方法不匹配时请求会落到同路径的GET编辑页路由,自然不会执行Trait里的逻辑,连你写的调试代码dd($request)都不会触发。
  • Laravel默认对POST、PUT、DELETE等写请求开启CSRF校验,原表单没有携带CSRF令牌,就算修正提交方法也会被中间件拦截返回419错误。
修复方案

修正Blade表单配置

给表单显式声明POST提交方法,同时加入CSRF令牌字段,修复后表单代码如下:

<form action="{{ route('permit.HazardsInfo', $permit->id) }}" method="POST">
    @csrf
    @if (Session::has('success'))
    <div class="alert alert-success w-25 ms-2 text-center">
        {{ Session::get('success') }}
    </div>
    @endif
    <input type="text" name="gaurd_names">
    <button type="submit" class="btn btn-success btn-label right ms-auto nexttab nexttab" data-nexttab="">
        <i class="ri-arrow-left-line label-icon align-middle fs-16 ms-2"></i>
        Submit
    </button>
</form>

关键改动点:

  • 给form标签添加method="POST"属性,和路由定义的请求方法匹配
  • 表单内添加@csrf指令,自动生成CSRF校验隐藏字段,通过框架的安全校验

可选优化(适配Laravel隐式模型绑定)

你路由参数名定义为{permit},控制器方法中参数名为$id,虽然可以正常运行,但可以调整为参数同名启用隐式模型绑定,省去手动查询模型的代码:
修改Trait中的方法代码:

public function HazardsInfo(Request $request, Permit $permit)
{
    // 移除手动查询代码:$permit = Permit::findOrFail($id); 框架会自动根据路由参数查询对应Permit模型
    $permit->update([
        'gaurd_names' => $request->gaurd_names,
    ]);
    Log::create([
        'permit_id' => $permit->id,
        'created_by' =>  Auth::user()->id,
        'status' => 'og-complete'
    ]);
    return Redirect::to("/permit/{$permit->id}/edit")->withSuccess('Hazards Has Been Updated');
}

修改完成后提交表单即可正常触发方法逻辑,调试代码dd($request)也会正常输出请求内容。

内容的提问来源于stack exchange,提问作者Karim Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:36:17