【问题标题】:Laravel Validation Passing Blank InputLaravel 验证传递空白输入
【发布时间】:2016-03-03 07:58:31
【问题描述】:

我有一个 laravel 表单来更新数据库中现有用户的信息,但如果该表单中的字段为空白,我不希望它更新数据库中的该记录。就像现在一样,如果该字段为空白并且提交了表单,它会传递该空白输入并删除数据库中的记录。

下面是编辑用户信息然后执行数据库更新的功能。我目前将 Request::old('...') 附加到电子邮件中,但由于验证是 'unique:users',它会给出错误 'email is taken'。

谢谢,

public function postEdit(Request $request)
{
    $this->validate($request, [
        'email' => 'unique:users|email|max:255',
        'password' => 'min:6',
        'confirm_password' => 'same:password', 
        'about_me' => 'max:500',
    ]);

    Auth::user()->update([


        'email' => $request->input('email'),
        'password' => bcrypt($request->input('password')),
        'confirm_password' => bcrypt($request->input('confirm_password')),
        'about_me' => $request->input('about_me'),
    ]);

    return redirect()->route('profile.edit')->with('info', 'You have updated your profile!');
}

【问题讨论】:

  • 如果用户删除信息,则表示他希望该字段为空白。没有?
  • 嗯,他们需要系统中的电子邮件地址。因此,选项将是 (1) 将该字段设为必填,但如果该电子邮件与该用户的当前数据库记录相同,则验证不会出错,或者 (2) 允许该字段为空白,并且,如果是这样,只需保留当前数据库记录,不要将其设置为 ' '。
  • 唯一接受第三个参数。在该参数中传递用户 ID,它会检查唯一的电子邮件,但相关用户中的字段将被跳过。

标签: laravel laravel-5 laravel-validation


【解决方案1】:

您需要修改unique规则以排除您正在编辑的记录。

代替

'email' => 'unique:users|email|max:255',

你应该使用:

'email' => 'unique:users,email,'. Auth::user()->id.'|email|max:255',

Reference for unique rule

【讨论】:

  • 谢谢,我在验证规则中寻找“例外”,但没有看到它列在“唯一”下。
【解决方案2】:

在验证规则中,您可以设置“必需”,这一定会有所帮助。

【讨论】:

  • 对,但问题是如果该字段是必需的,并且用户希望保持该电子邮件相同,那么它将返回错误,因为该电子邮件已被占用。
  • 在这种情况下我看到了 2 个选项。 1)从验证器中删除唯一规则并检查此手动方式​​。 2) 在这种情况下,用户必须获得授权。再写一条规则,合并唯一规则,检查授权用户邮箱是否与输入相同。
猜你喜欢
  • 2017-01-07
  • 2021-09-08
  • 2022-01-04
  • 2017-08-12
  • 2017-01-13
  • 1970-01-01
  • 2015-05-26
  • 2017-11-13
  • 2018-01-10
相关资源
最近更新 更多