【问题标题】:How to make validation rules for storing and update users if there are unique attributes如果存在唯一属性,如何制定用于存储和更新用户的验证规则
【发布时间】:2019-10-05 20:09:55
【问题描述】:

我使用username 作为id 登录,并将用户名和电子邮件设为唯一。 每当我创建用户名和电子邮件时,验证规则都会检查传入的数据并且没有问题,因为usernameemail 将是新的和唯一的。 更新时出现问题。当我更新属性时,我不需要更改用户名,但规则需要unique, username使用验证规则更新唯一属性的最佳做法是什么?

更新用户方法

 public function updateUser($req, $id)
    {
        $user = User::where('user_id', $id)->firstOrFail();
        $user->username = $req->input('username');
        $user->password = Hash::make($req->input('password'));
        $user->email = $req->input('email');
        $user->first_name = $req->input('first_name');
        $user->last_name = $req->input('last_name');
        $user->phone = $req->input('phone');
        $user->emergency_phone = $req->input('emergency_phone');
        $user->profile_photo = $req->input('profile_photo');
        $user->role = $req->input('role');
        $user->status = $req->input('status');

        $user->save();
        return $this->filterUsers([$user]);
    }

规则

  protected $rules = [

        'username' => 'required|max:20|unique:users',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required',
        // **in Production **
        // 'password' => [
        //     'required',
        //     'min:6',
        //     'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/',
        //     'confirmed'
        // ],
        /**
         * Three of the five rules. 
         * English uppercase characters (A – Z)
         * English lowercase characters (a – z)
         * Base 10 digits (0 – 9)
         * Non-alphanumeric (For example: !, $, #, or %)
         * Unicode characters
         */

        'first_name' => 'required|string|max:255',
        'last_name' => 'required|string|max:255',
        'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:5',
        'role' => 'required'


    ];

【问题讨论】:

    标签: laravel laravel-validation


    【解决方案1】:

    你需要在控制器Use Validator;中使用laravel验证器类

    并使用这样的东西:

    $error = Validator::make($req->all(), $rules);
    

    验证文档中的更多示例 here

    【讨论】:

      【解决方案2】:

      在编辑时它将检查唯一的用户名,因此我们避免当前编辑 id 的唯一性

      在更新方法中,您的验证规则如下:

      protected $rules = [
              'username' => 'required|max:20|unique:users,username,' . $id',
              'email' => 'required|string|email|max:255|unique:users,email,' . $id',
              'password' => 'required',
              'first_name' => 'required|string|max:255',
              'last_name' => 'required|string|max:255',
              'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:5',
              'role' => 'required'
          ];
      

      【讨论】:

        【解决方案3】:

        你可以使用

        'username' => 'required|max:20|unique:users,username,' . $id',
        

        如果你的用户表主键是id,如果是user_id之类的其他东西,那么它会变成

        'username'  =>  'required|email|unique:user,username,' . $request->input('user_id') . ',userid',
        

        所以语法是

        'input_field' => 'unique:<table name>,<column name for this input field>, <unique id>, <unique id column in table>';
        

        【讨论】:

          猜你喜欢
          • 2014-04-19
          • 1970-01-01
          • 2016-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-29
          • 2020-09-13
          相关资源
          最近更新 更多