【问题标题】:Laravel: validation for unique username issue [duplicate]Laravel:验证唯一用户名问题[重复]
【发布时间】:2014-10-16 12:14:42
【问题描述】:

我有一个面条刮刀,我似乎无法弄清楚。我正在验证唯一的用户名和电子邮件地址。我有以下规则:

protected $rules = array(
    'username' => 'required|min:4|unique:users,username',
    'email'    => 'email|unique:users,email',
    'password' => 'min:6',
);

如果我更新具有用户名(与当前相同)的表单,我会收到 The username has already been taken. 错误。如果我对电子邮件做同样的事情,我根本不会收到任何错误。

我知道将最后一个参数添加到唯一验证:

'unique:users,username,{{$id}}''unique:users,username,'.$id

这不适用于用户名。我遇到了同样的问题。

我不明白为什么这适用于电子邮件,但不适用于用户名。

有人遇到过类似的问题或知道我哪里出错了吗?

非常感谢,

【问题讨论】:

  • 我遇到了同样的问题

标签: php mysql validation laravel laravel-4


【解决方案1】:

最可能的原因是因为 $id 可能是通过您的 URI 拉入的,因此它不是 Input::all() 的一部分。

要对其进行验证,您需要在表单或请求中包含一个隐藏的“id”字段,您需要使用添加 id 的 validate 方法扩展您的存储库或控制器到正在验证的数据数组中。

/**
 * Validate
 *
 * @param $data
 * @param $id
 * @throws \ValidationException
 * @return boolean
 */
public function validate($data, $id = null)
{
    $rules = SomeModel::$rules;
    if(! is_null($id))
    {
       $data['id'] = $id;
       // Only add exclude rule to end of rule if you haven't included already
       $rules['username'] .= ',' . $data['id'];
    }
    $validator = \Validator::make($data, $rules);
    if($validator->fails()) {
        throw new \ValidationException($validator);
    }
    return TRUE;
}

注意:ValidationException 不是普通异常,因此要么创建此异常类型,要么修改代码以处理验证错误。

【讨论】:

    【解决方案2】:

    这是我的代码,我使用 laravel 8

    $this->validate($request, [
        'name'      => ['required', 'string', 'max:255'],
        'email'     => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.$user->id],
        'username'  => ['string', 'max:255',"unique:users,username,{$user->id}"],
        'roles'  => ['required'],
    ]);
    

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 2020-07-07
      • 2013-07-09
      • 2021-02-25
      • 2020-08-02
      • 2021-03-08
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      相关资源
      最近更新 更多