在创建新用户时,我使用以下规则进行验证:
protected $rules= [
'name' => 'required',
'email' => [
'required',
'unique:user',
'email'
]
];在更新现有用户时,我使用与上面所示相同的规则集,但如果用户根本不更改其电子邮件,则不希望出现验证错误。
我目前使用以下方法来解决这个问题:
if (!User::changed('email')) {
unset($user->email);
}对我来说,这感觉像是一个肮脏的变通方法,所以我想知道是否有更好的替代方案。
还要注意,changed方法是我自己编写的。有没有人知道是否有一个原生的Laravel 4方法来检查模型属性是否发生了变化?
谢谢!
发布于 2013-05-13 17:00:28
唯一验证规则允许忽略给定的ID,在您的示例中,该ID是您正在更新的数据集的ID。
'email' => 'unique:users,email_address,10'http://four.laravel.com/docs/validation#rule-unique
发布于 2013-08-06 13:01:48
一种方法是在模型中创建一个验证函数,并在控制器传入输入、场景和id (要忽略)的情况下调用它。
public function validate($input, $scenario, $id = null)
{
$rules = [];
switch($scenario)
{
case 'store':
$rules = [
'name' => 'required|min:5|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|min:4|confirmed'
];
break;
case 'update';
$rules = [
'name' => 'required|min:5|unique:users' .',name,' . $id,
'email' => 'required|email|unique:users' .',email,' . $id,
'password' => 'min:4|confirmed'
];
break;
}
return Validator::make($input, $rules);
}然后在控制器中:
$input = Input::all();
$validation = $user->validate($input, 'update', $user->id);
if ($validation->fails())
{
// Do stuff
}
else
{
// Validation passes
// Do other stuff
}正如其他人提到的,唯一规则的第三个参数指定了要忽略的id。您可以添加其他用例,例如“login”以重用验证函数。
或者,Jeffrey Way在Tuts Premium has a great series of lessons in "What's New In Laravel 4",其中包括一些使用服务和侦听器处理验证的其他方法。
发布于 2013-05-13 17:00:46
请参阅http://four.laravel.com/docs/validation#rule-unique上的文档
您可以排除用户自己的id
protected $rules= [
'name' => 'required',
'email' => [
'required',
'unique:user,email,THE_USERS_USER_ID',
'email'
]
];https://stackoverflow.com/questions/16517606
复制相似问题