Как сделать правила проверки для хранения и обновления пользователей, если есть уникальные атрибуты - PullRequest
0 голосов
/ 19 мая 2019

Я использую username как id для входа в систему и сделал имя пользователя и адрес электронной почты уникальными.Всякий раз, когда я создавал имя пользователя и адрес электронной почты, правила проверки проверяли поступающие данные, и с ними проблем не возникало, поскольку username и email были бы новыми и уникальными.Проблема возникает при обновлении.когда я обновляю атрибуты, мне больше не нужно менять имя пользователя, но правила ожидают 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'


    ];

Ответы [ 3 ]

1 голос
/ 19 мая 2019

Во время редактирования будет проверяться уникальное имя пользователя, поэтому мы избегаем уникального текущего идентификатора редактирования

В методе обновления ваши правила проверки согласно нижеуказанному:

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'
    ];
1 голос
/ 19 мая 2019

Вы можете использовать

'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>';
0 голосов
/ 19 мая 2019

Вам необходимо использовать класс валидатора laravel в контроллере Use Validator;

И используйте что-то вроде этого:

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

Дополнительные примеры здесь в документах проверки.

...