如何从请求(规则)中获取用户 ID 进行更新?
Posted
技术标签:
【中文标题】如何从请求(规则)中获取用户 ID 进行更新?【英文标题】:How to take User Id from Request(rules) for update? 【发布时间】:2021-07-20 11:57:13 【问题描述】:我可以知道如何使用用户 ID 来请求更新吗?例如,当我更新用户和密码时。但是,除了电子邮件。当时,它显示“电子邮件已被占用的消息。当我搜索解决方案时,我发现用用户ID解决。我知道这个问题被问了很多次。但是,我没有得到任何合适的答案给我。你能帮帮我吗?
这是我的控制器代码
public function edit(Users $request,$id)
$users=User::whereId($id)->firstorFail();
$users->name = $request->get('name');
$users->email = $request->get('email');
$users->password = Hash::make($request->get('password'));
$users->role = $request->get('role');
$users->update();
$request->session()->forget('editvalue');
$userdata = User::paginate(4);
// session()->flash('status', 'User has been successfully added.');
return view('pages.auth.register', compact('userdata'))->with('status','User has been successfully added.');
这是我的申请表。我想在这个中获取 id 值。当我取值时,它显示消息尝试获取非对象的属性“id”
public function rules()
return [
'name' => 'required', 'string', 'max:255',
'email' => 'sometimes','required', 'string', 'email', 'max:255', 'unique:users,'. $this->users->id,
'password' => 'required', 'string', 'min:8', 'confirmed',
'role' => 'required', 'string',
];
这是我的 web.php
Route::get('users/edit/id', 'UsersController@editscreen');
Route::post('users/edit/id', 'UsersController@edit');
【问题讨论】:
您忘记在unique
rule 中添加电子邮件列
这能回答你的问题吗? How validate unique email out of the user that is updating it in Laravel?
【参考方案1】:
我明白了。
use Illuminate\Validation\Rule;//import Rule class
public function rules()
return [
'name' => 'required', 'string', 'max:255',
'email' => ['sometimes','required', 'string', 'email', 'max:255',
Rule::unique('users')->ignore($this->id),
],
'password' => 'required', 'string', 'min:8', 'confirmed',
'role' => 'required', 'string',
];
【讨论】:
【参考方案2】:我认为您无法在请求类中验证id
,但您可以在路由中使用正则表达式进行验证。 (我的例子是针对 laravel 8 但原理还是一样的)
Route::post('/users/edit/id', [UsersController::class, 'editscreen'])
->where('id', '[0-9]+');
【讨论】:
【参考方案3】:您还应该将列名放入规则中,
模式应该是unique:table,column,except_id
你能用这个替换你的RequestForm吗:
public function rules()
return [
'name' => ['required', 'string', 'max:255'],
'email' => ['sometimes','required', 'string', 'email', 'max:255', 'unique:users,email,'. $this->users->id],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'role' => ['required', 'string'],
];
【讨论】:
我做到了。但是,它显示了正在尝试获取非对象的属性“id”的消息。 可能的原因是您没有以正确的方式传递用户,您可以尝试将您的路线从Route::post('users/edit/id', 'UsersController@edit');
更改为Route::post('users/edit/users', 'UsersController@edit');
感谢您的澄清。我得到了答案。 :)以上是关于如何从请求(规则)中获取用户 ID 进行更新?的主要内容,如果未能解决你的问题,请参考以下文章