Laravel中按钮仅更新用户status字段失败,如何修复?
修复仅传递'status'参数更新用户状态的问题
我看了你的代码,马上就发现了问题所在:你的表单根本没传递要更新的用户ID,而且你在控制器里试图获取的status参数也不存在——这就导致你的激活/停用方法找不到正确的用户,自然无法更新状态。
下面是具体的修复步骤:
1. 修改视图:添加用户ID的隐藏字段
你需要在表单里加入一个隐藏字段,把当前用户的ID传递给控制器,这样控制器才知道要操作哪个用户:
{!! Form::open(array('url' => 'admins-users/status')) !!} {{-- 新增:传递用户ID的隐藏字段 --}} {!! Form::hidden('user_id', $user->id) !!} @if ($user->status) {!! Form::submit('inactivate', ['name' => 'inactivate', 'class'=>'btn btn-xs btn-default']) !!} @else {!! Form::submit('Activate', ['name' => 'activate', 'class'=>'btn btn-xs btn-success']) !!} @endif {!! Form::close() !!}
2. 修改控制器:获取正确的参数并更新用户
控制器里的$action = Input::get('status');完全是无效的,因为表单里没有这个字段。我们要改成获取用户ID,然后传递给激活/停用方法:
public function activation() { // 获取表单传递的用户ID $userId = Input::get('user_id'); if (Input::get('activate')) { $this->activateUser($userId); } elseif (Input::get('inactivate')) { $this->deactivateUser($userId); } return redirect(route('admins-users.index'))->with('message-post', 'Status was updated successfully'); } public function activateUser($userId) { // 用findOrFail更严谨,避免更新不存在的用户(如果不需要自动创建用户的话) User::findOrFail($userId)->update(['status' => "1"]); } public function deactivateUser($userId) { User::findOrFail($userId)->update(['status' => "0"]); }
额外说明
如果你原本的想法是直接传递status参数来控制更新值(而不是通过按钮名称判断),也可以调整逻辑:比如在视图里传递目标status值,控制器直接拿这个值更新。但从你现有代码的按钮逻辑来看,上面的修复更贴合你的实现思路。
内容的提问来源于stack exchange,提问作者Ilham Firman Ashari
相关产品推荐
相关产品推荐

