Laravel如何识别表单点击的按钮 区分修改角色与删除用户操作
实现方案
现有路由配置无需改动,仅需要修改表单和控制器代码即可,具体操作如下:
1. 修改表单代码
给两个提交按钮添加相同name属性和不同value属性,提交时后端可通过该参数区分操作类型,同时可给删除按钮添加点击确认避免误操作:
<form action="edit-role-permission/{{ $user->id }}" method="POST"> @csrf <select name="roles"> <option value="user">User</option> <option value="staff">Staff</option> </select> <button type="submit" name="action" value="update_role">修改角色</button> <button type="submit" name="action" value="delete_user" onclick="return confirm('确定要删除该用户吗?操作不可撤销')">删除用户</button> </form>
注意:原option标签不需要加name属性,只有select标签需要配置name即可。
2. 修改控制器逻辑
判断请求携带的action参数,分别执行对应操作:
// class AdminController extends Controller function editRolePermission(Request $request, User $user) { $action = $request->input('action'); if ($action === 'update_role') { // 原有更新角色逻辑 $user->update(["role" => $request->roles]); return redirect()->back()->with("message", "用户角色更新成功"); } elseif ($action === 'delete_user') { // 删除用户逻辑,若开启软删直接调用delete(),物理删除可调用forceDelete() $user->delete(); return redirect()->back()->with("message", "用户删除成功"); } return redirect()->back()->withErrors("非法操作"); }
可选优化
如果希望路由语义更清晰,也可以拆分两个路由分别处理角色更新和用户删除,从架构层面解耦两个操作,后续维护成本更低。
内容的提问来源于stack exchange,提问作者user16466807
相关产品推荐
相关产品推荐

