Laravel 4 表单验证在更新表单上应该是唯一的,但如果是当前的则不是
Posted
技术标签:
【中文标题】Laravel 4 表单验证在更新表单上应该是唯一的,但如果是当前的则不是【英文标题】:Laravel 4 Form Validation should be unique on update form, but not if current 【发布时间】:2015-03-19 06:00:01 【问题描述】:我正在尝试验证更新用户个人资料表单,其中验证应检查电子邮件是否不存在,但忽略用户现有电子邮件是否仍然存在。
但是,这会继续返回验证错误消息“此电子邮件已被占用”。
我真的不确定我哪里出错了。否则,更新表单将完美运行并更新。
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 '
【问题讨论】:
$id
如何在您的用户模型中被替换?
我曾经在我的控制器中使用它,但是由于我将所有验证都移到了模型中,所以它没有。我不确定如何将 id 传递给模型。也许这就是它失败的地方
【参考方案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
【讨论】:
【参考方案2】:您的规则编写正确以忽略特定 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;
【讨论】:
以上是关于Laravel 4 表单验证在更新表单上应该是唯一的,但如果是当前的则不是的主要内容,如果未能解决你的问题,请参考以下文章