如何从请求(规则)中获取用户 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');

【问题讨论】:

您忘记在uniquerule 中添加电子邮件列 这能回答你的问题吗? 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 进行更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 jwt 令牌中获取用户 ID?

如何从express中的PATCH请求获取请求有效负载

承诺所有并获取请求

身份验证后请求其他服务时如何从 JWT 令牌获取用户名?

使用 activerecord 发出请求以仅从组中获取用户,而不从其他人中获取

如果子项从 RTK 查询中的获取请求更新,我如何更新列表中的数据