编程语言
首页 > 编程语言> > php-Laravel 4唯一验证规则不起作用

php-Laravel 4唯一验证规则不起作用

作者:互联网

需要帮助来更新我的验证规则中的唯一规则.我有一个抽象验证器,它将在存储到数据库之前验证规则,并且在规则数组中,我在创建或注册用户时将电子邮件设置为唯一,但是在更新用户时,enique电子邮件不应验证该电子邮件是否归所有者所有用户.

抽象类验证器

abstract class Validator {

    protected $errors;

    protected $attributes;

    public function __construct($attributes = null)
    {
        $this->attributes = $attributes ?: \Input::all();
    }

    public function passes()
    {
        $validation = \Validator::make($this->attributes, $this->rules());

        if ($validation->passes()) return true;

        $this->errors = $validation->messages();

        return false;
    }

    public function getErrors()
    {
        return $this->errors;
    }
}

验证规则(UserRule.php)

use MyCustomValidatorNamespaceHere....

class UserRules extends Validator

public function rules()
{
    return [
        'email' => 'required|email|unique:users,email,id',
        ...
    ];
}

在我的UserController中,我将UserRule注入了承包商. (UserRule $userRule).这是update方法中的代码.

public function update($id)
{
    $if ($this->userRule->passes())
    {
       $this->user->find($id)->update(Input::all());
       return .........
    }
}

但是验证总是失败,并显示电子邮件已被接收的错误.请帮助大家.

解决方法:

问题是你的规则.更新时,您需要使用不检查更新记录的唯一性.因此,您应该具有:

 unique:users,email,id

但例如:

 unique:users,email,10

如果您编辑ID为10的记录.

您可以做的就是定义以下规则:

'email' => 'required|email|unique:users,email,{id}',

和您的通行证方法:

public function passes($id = null)
{
    $rules = $this->rules();
    $rules['email'] = str_replace('{id}', $id, $rules['email']);

    $validation = \Validator::make($this->attributes, $rules);

    if ($validation->passes()) return true;

    $this->errors = $validation->messages();

    return false;
}

现在在更新规则中使用:

if ($this->userRule->passes($id))

顺便说一下,您在$if中有错误($this-> userRule-> passes())-应该是if而不是$if

标签:laravel-validation,laravel,eloquent,laravel-4,php
来源: https://codeday.me/bug/20191029/1957284.html