【问题标题】:laravel validate unique fields on updatelaravel 在更新时验证唯一字段
【发布时间】:2018-08-09 23:50:52
【问题描述】:

我正在使用 L5 存储库,它有验证器包 (https://github.com/andersao/laravel-validator),但我在更新它时验证唯一字段时遇到问题,谁能帮助我???

******下面的示例我在 RULE_UPDATE 上尝试过这种方式但没有成功..

((((((我要验证的字段:people_id,电子邮件,因为这些仅对其余用户是唯一的,而不是对当前正在更新的当前用户是唯一的))))))))

在 UserService.php 中调用验证:

使用 Prettus\Validator\Contracts\ValidatorInterface;

        public __construct(){
           $this->validator = \App::make('App\Validators\UserValidator');
        }
        save($data){

        if(!empty($data['id'])){

            $this->validator->with($data)->passesOrFail(ValidatorInterface::RULE_UPDATE);

        }else{
            $this->validator->with($data)->passesOrFail(ValidatorInterface::RULE_CREATE);
        }
        }

命名空间 App\Validators;

使用\Prettus\Validator\Contracts\ValidatorInterface; 使用 \Prettus\Validator\LaravelValidator;

类 UserValidator 扩展了 LaravelValidator {

protected $rules = [
    ValidatorInterface::RULE_CREATE => [

        'people_id' => 'required|unique:users',
        'active' => 'required',
        'available_chat' => 'required',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
        'masters_id' => 'required',
    ],
    ValidatorInterface::RULE_UPDATE => [

        'id' => 'required',
        'people_id' => 'required|unique:users,id,:id',
        'active' => 'required',
        'available_chat' => 'required',
        'email' => 'required|string|email|max:255|unique:users,id,:id',
        //'password' => 'required|string|min:6|confirmed',
        //'masters_id' => 'required',
    ],
];
protected $messages = [

        'id.required' => 'Usuário não encontrado!',
        'people_id.required' => 'Pessoa é obrigatório',
        'people_id.unique' => 'Pessoa já cadastrada',
        'active.required' => 'Obrigatório',
        'available_chat.required' => 'Obrigatório',
        'email.required' => 'Digite o e-mail',
        'password.required' => 'Digite a senha',
        'password.min' => 'Digite uma senha com 6 caracteres',
        'password.confirmed' => 'Confirme a senha corretamente',
        'email.unique' => 'E-mail já cadastrado',
];

}

【问题讨论】:

    标签: laravel validation field


    【解决方案1】:

    更新时您需要强制使用唯一规则来忽略给定 ID

    'people_id' => 'required|user,people_id,'.$id 
     //id is the primary id of the field which you want to update 
      with unique validation which must be ignored
    

    https://laravel.com/docs/5.2/validation#rule-unique

    【讨论】:

    • 以这种方式正常使用 Request 类是成功的,但是使用这个包它不起作用,我尝试了页面错误 'Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_UNKNOWN)常量表达式包含无效操作'
    • 你能告诉我你是如何触发验证的吗?
    【解决方案2】:

    尝试将寄存器的id放到setId方法中

    $this->validator->with($data)->setId($id)->passesOrFail(ValidatorInterface::RULE_UPDATE);
    

    【讨论】:

    • 在您发布之前,我以同样的方式找到了解决方案,谢谢!!!!
    • 现在如何在验证规则中引用 id?
    【解决方案3】:

    尝试使用以下更改将起作用。 在您的验证器中添加以下代码以检查唯一电子邮件验证

        ValidatorInterface::RULE_UPDATE => [
                    'email'  => 'required|unique:customers,email,id'
                ],
    

    之后为这样的验证代码设置 id

        $this->validator->with($request->all())->setId($id)->passesOrFail(ValidatorInterface::RULE_UPDATE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-28
      • 2019-03-24
      • 2019-11-11
      • 2019-02-26
      • 2014-08-20
      • 2018-07-05
      • 2018-07-17
      • 1970-01-01
      相关资源
      最近更新 更多