如何验证更新方法(laravel 5.3)

时间:2016-11-01 06:40:19

标签: php laravel validation

我尝试使用

$this->validate($request, [
            'email' => 'required'|unique:users',
            'adr' => 'required'
         ]);

但它不符合要求 因为每次如果我想更新它说用户已被采取因为我不需要更新电子邮件地址 我希望如果用户不更新电子邮件地址,则应该创建,否则如果用户也更新电子邮件地址,则应首先检查是否已在DB中找到它显示消息电子邮件地址已存在。

功能

{
 $this->validate($request, [
        'place_holder' => 'required',
        'word_list' => 'required',
     ]);


    $user = User::findOrFail($id);
    $input = $request->all();
    $user->fill($input)->save();
    session()->flash('msg',trans('Successfully Updated.'));
    return redirect()->route('user.index');
}

2 个答案:

答案 0 :(得分:0)

您对更新时的电子邮件的验证应为

'email' => 'required|email|unique:users,email,'.$user->id,

或者你可以把它写成:

use Illuminate\Validation\Rule;

Validator::make($data, [
 'email' => [
    'required',
    Rule::unique('users')->ignore($user->id),
  ],
]);

Docs

答案 1 :(得分:0)

如果您想更改登录用户的意思,首先您需要通过auth找到登录用户,

$userId = Auth::user()->id;

Auth是

use Illuminate\Support\Facades\Auth;

然后你可以使用like,

'email' => 'required|email|unique:users,email,'.$userId.',id',

使用此验证时可以正常工作。

另外,你可以通过路线。像

路线,

Route::put('user_profile/{user_profile_id}', ...);

mywebsite.com/user_profile/1

$userId = $this->routes(user_profile_id);

'email' => 'required|email|unique:users,email,'.$userId.',id',

我希望,它会对你有帮助。