Laravel: проверка шаблона альфа и регулярных выражений при обновлении - PullRequest
0 голосов
/ 27 марта 2020

Здравствуйте, все это мой контроллер обновлений для пользователя. Я хочу знать, как я могу применить эти laravel правила проверки ТОЛЬКО к обновленным полям. В настоящее время, когда я обновляю только имя, номер мобильного телефона также подтверждается. Мои поля имени подтверждены альфа, а номер телефона подтвержден через регулярное выражение.

public function update(Request $request, User $setting)
    {
         request()->validate([
            'name' => ['required', 'alpha','min:2', 'max:255'],
            'last_name' => ['required', 'alpha','min:2', 'max:255'],
            'mobile'=>['required', 'string','regex:/\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
            2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
            4[987654310]|3[9643210]|2[70]|7|1)\d{1,14}$/'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.$setting->id.''],
        ]);

        $setting->update($request->all());


                        return Redirect::back()->with('success','User updated successfully');                
    }

Я могу обработать поле электронной почты (уникальное), но не остальные.

1 Ответ

1 голос
/ 27 марта 2020

Учитывая небольшой чат, который у нас был в комментариях, вы должны сначала получить модель из базы данных и отослать запрос с атрибутами модели. Тогда вы можете сохранить правила проверки только для измененных атрибутов.

public function update(int $id, Request $request, User $userRepository)
{    
     $user = $userRepository->find($id);

     $changedAttributes = array_diff($request->all(), $user->getAttributes());

     $validationRules = array_intersect_key([
        'name'      => ['required', 'alpha','min:2', 'max:255'],
        'last_name' => ['required', 'alpha','min:2', 'max:255'],
        'mobile'    => ['required', 'string', 'regex:/\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
        2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
        4[987654310]|3[9643210]|2[70]|7|1)\d{1,14}$/'],
        'email'     => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.$setting->id.''],
    ], $changedAttributes);

    $this->validate($request, $validationRules);

    $user->update($changedAttributes);

    return Redirect::back()->with('success','User updated successfully');                
}
...