一种方法是在模型中创建一个验证函数,并在控制器传入输入、场景和 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。您可以添加其他情况,例如“登录”以重用验证功能。
另外,Tuts Premium 的 Jeffrey Way 在“Laravel 4 中的新功能”中有一系列精彩的课程,其中包括使用服务和侦听器处理验证的其他几种方法。