0

我正在尝试验证更新用户个人资料表单,其中验证应检查电子邮件是否不存在,但忽略用户现有电子邮件是否仍然存在。

但是,这会继续返回验证错误消息“此电子邮件已被占用”。

我真的不确定我要去哪里错了。否则,更新表单将完美运行并更新。

HTML

 {{ Form::text('email', Input::old('email', $user->email), array('id' => 'email', 'placeholder' => 'email', 'class' => 'form-control')) }}

路线

Route::post('users/edit/{user}', array('before' => 'admin', 'uses' => 'UserController@update'));

用户模型

'email' => 'unique:users,email,{{{ $id }}}'
4

2 回答 2

3

您的规则已正确编写以忽略特定 id,但是,您需要{{{ $id }}}在尝试验证之前更新唯一规则中的值。

我不一定是这种方法的忠实拥护者,但假设您的规则是User对象上的静态属性,您可以创建一个静态方法,该方法将水合并返回具有正确值的规则。

class User extends Eloquent {
    public static $rules = array(
        'email' => 'unique:users,email,%1$s'
    );
    public static function getRules($id = 'NULL') {
        $rules = self::$rules;
        $rules['email'] = sprintf($rules['email'], $id);
        return $rules;
    }
}
于 2015-01-20T22:25:22.153 回答
1

您可以使用验证器的有时功能来完成此操作

就像是:

$validator->sometimes('email', 'unique:users,email', function ($input) {
    return $input->email == Input::get('email');
});

有关更多信息,请参阅http://laravel.com/docs/4.2/validation#conditionally-adding-rules

于 2015-01-20T21:21:55.217 回答