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

Laravel 8 如何将表单选中的角色值传递给路由对应的处理方法

问题修复方案

原代码的问题在于,表单POST提交的字段不属于路由参数,无法直接作为控制器方法的参数接收,必须通过请求实例获取,同时之前的更新操作没有给role字段赋值,所以修改不生效。

1. 控制器方法修改

你不需要将角色值作为路由参数传入方法,表单提交的字段需要通过Illuminate\Http\Request实例获取,同时补充参数校验避免非法值传入:

use Illuminate\Http\Request;

function editRolePermission(Request $request, $id)
{
    // 校验提交的角色值合法性
    $validated = $request->validate([
        'roles' => 'required|in:user,staff'
    ]);

    DB::table('users')
        ->where('id', $id)
        ->limit(1)
        ->update(['role' => $validated['roles']]);
    
    return redirect()->back();
}

2. 前端表单优化

去掉option标签多余的name属性,如果你需要下拉选完自动提交,把onchange事件移到select标签上即可:

<form action="{{ route('updateRolePermission', $user->id) }}" method="POST">
    @method('PATCH')
    @csrf

    <!-- 不需要自动提交可以去掉onchange属性,保留提交按钮即可 -->
    <select name="roles" onchange="this.form.submit()">
        <option value="user">User</option>
        <option value="staff">Staff</option>
    </select>
    <input type="submit" value="修改角色">
</form>

3. 路由配置

你现有的路由不需要做任何修改,可正常使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:04