【问题标题】:Laravel: Validation alpha and regex pattern on updateLaravel:更新时的验证 alpha 和正则表达式模式
【发布时间】:2020-07-07 22:38:57
【问题描述】:

您好,这是我的用户更新控制器。我想知道如何将这些 laravel 验证规则仅应用于更新的字段。目前,当我只更新名字时,手机号码也会得到验证。我的姓名字段经过 alpha 验证,电话号码通过正则表达式验证。

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');                
    }

我能够处理电子邮件(唯一)字段,但不能处理其他字段。

【问题讨论】:

  • 只更新名字是什么意思?你只发送名字来请求?
  • 基本上,如果您成功创建模型,则表示验证通过对吧?为什么它也不会传递更新?
  • 不假设有四个字段,名字,姓氏电子邮件和手机号码,然后假设用户更新了提到的字段之一,那么我只希望验证该字段而不是未更改的字段。
  • 但是,即使它们被验证了,它们也会通过验证,因为它们在创建时通过了验证..
  • 是的,但问题是我手动将一些值插入到数据库中(不考虑验证规则),因此它们在创建时没有经过验证

标签: php laravel validation exception laravel-6


【解决方案1】:

考虑到我们在 cmets 中的小聊天,您必须首先从数据库中获取模型并将请求与模型的属性进行比较。然后您可以只保留更改的属性的验证规则。

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');                
}

【讨论】:

  • 谢谢,但它给了我以下错误,传递给 App\Http\Controllers\Controller::validate() 的参数 1 必须是 Illuminate\Http\Request 的实例,在 C 中调用的数组: \xampp\htdocs\myWeb\app\Http\Controllers\SettingController.php 在第 70 行,即 $this->validate($validationRules, $changedAttributes);
  • yw :) 很高兴我能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2017-03-03
  • 2015-05-14
  • 1970-01-01
相关资源
最近更新 更多