Laravel 请求中的用户 ID 参数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/43273952/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 15:44:43  来源:igfitidea点击:

User ID parameter in Laravel Request

phplaravelvalidation

提问by Ebuen Clemente Jr.

I have an admin where he is able to create and update users. I made a new Form request called 'UserUpdateRequest'. How can I pass the user id so that it can update user detail? Here are my rules:

我有一个管理员,他可以在其中创建和更新用户。我提出了一个名为“UserUpdateRequest”的新表单请求。如何传递用户 ID 以便它可以更新用户详细信息?这是我的规则:

// UserUpdateRequest 
public function rules()
    {
        return [
            'firstname' => 'required|min:2|max:255',
            'lastname' => 'required|min:2|max:255',
            'username' => 'required|max:255',
            'password' => 'required|min:6|confirmed',
            'email' => 'required|email|max:255|unique:users,email,????',
            'contact' => 'required|integer',
            'gender' => 'required|in:m,f',
            'role_id' => 'required|exists:roles,id',
        ];
    }

// Controller
public function update(UserUpdateRequest $request, User $user)
    {
        $user->update([
            'firstname' => request('firstname'),
            'lastname' => request('lastname'),
            'username' => request('username'),
            'email' => request('email'),
            'contact' => request('contact'),
            'gender' => request('gender'),
            'role_id' => request('role_id'),
        ]);

        session()->flash('message', 'User has been successfully added.');

        return redirect('/users/' . $user->id);
    }

'required|email|max:255|unique:users,email,????',is where I am confused.

'required|email|max:255|unique:users,email,????',是我困惑的地方。

回答by Ebuen Clemente Jr.

Here's what i did:

这是我所做的:

View:

看法:

<input type="hidden" value="{{ $user->id }}" name="user_id">

Controller:

控制器:

public function rules()
    {
        $id = $this->request->get('user_id');

    return [
        'firstname' => 'required|min:2|max:255',
        'lastname' => 'required|min:2|max:255',
        'username' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users,email,'.$id,
        'contact' => 'required|integer',
        'gender' => 'required|in:m,f',
        'role_id' => 'required|exists:roles,id',
    ];
}

回答by LeMagnifick

routes/web.php

路线/ web.php

Route::get('/user/edit/{id}', 'UserController@edit')->name('user.edit');
Route::post('/user/update/{id}', 'UserController@update')->name('user.update');

FormRequest

表单请求

'email' => ['required',Rule::unique('users')->ignore($this->route('id'))],

回答by Anar Bayramov

Since admin is changing users I assume you already have user data on your view file.

由于管理员正在更改用户,因此我假设您的视图文件中已经有了用户数据。

you can pass a hidden input on your form.

您可以在表单上传递隐藏的输入。

<input type="hidden" value="{{$user->id}}" name="user_id" />

and then receive it on your controller.

然后在您的控制器上接收它。

$user_id = $request->input('user_id');
$user = \App\User::find($user_id); 
//validation comes here

Edit Depending on new information

根据新信息编辑

public function update(UserUpdateRequest $request, User $user) 

should be

应该

public function update(Request $request, User $user) 

and you have to call Request on your controller;

你必须在你的控制器上调用 Request ;

use Illuminate\Http\Request;

after that you can get your request as

之后你可以得到你的请求

dd($request->all());

but if you are using a special request post your UserUpdateRequestclass.

但如果您使用特殊请求,请发布您的UserUpdateRequest类。

回答by D. Pachauri

Pass the userId as in hidden input field and use in the unique validation like

在隐藏输入字段中传递 userId 并在唯一验证中使用,如

unique:users,email,userId