让我们说,我在Laravel中有一个用户模型:
class User extends Eloquent implements UserInterface, RemindableInterface {
public static $rules = array(
'email' => 'required|email',
'password' => 'required|min:8|confirmed',
'password_confirmation' => 'required|min:8'
);
...
}
存储在模型中的规则将重复用于登录和注册表单,但在不需要密码确认(例如登录表单)时会出现问题。并且可能存在许多应该改变规则的情况。
那么,是否有任何纯方法如何修改Laravel中不同情况的模型存储验证规则? 我是否必须重新组织我的规则存储方法?
谢谢!
答案 0 :(得分:12)
您可以在需要时动态添加规则。
例如:
如果我是对的,您在注册用户和更新密码时只需要password_confirmation
规则。因此,在您的模型中,请勿添加password_confirmation
规则。
public static $rules = array(
'email' => 'required|email',
'password' => 'required|min:8|confirmed'
}
如何动态添加规则:
要注册用户,需要password_confirmation
字段。因此,您可以从控制器中添加如下规则:
$rules = User::$rules;
$rules['password_confirmation'] = 'required|min:8';
有时您可能需要根据用户输入添加规则。
例如:
如果用户选择Australia
作为国家/地区,则他们还必须选择州。
$v = Validator::make($data, $rules ));
$v->sometimes('state', 'required', function($input)
{
return $input->country == 'Australia';
});
答案 1 :(得分:11)
游戏后期,但根据Laravel文档,您可以使用“有时”规则。
http://laravel.com/docs/validation
简而言之: 在某些情况下,只有在输入数组中存在该字段时,您可能希望对字段运行验证检查。要快速完成此操作,请将有时规则添加到规则列表中:
'password_confirmation' => 'sometimes|required|min:8|confirmed'
答案 2 :(得分:10)
我这样做。
在模型中:
public static $rules = [
'create' => [
'first_name' => 'min:3',
'last_name' => 'min:3',
'email' => 'required|email|unique:users',
'password' => 'required|min:5|confirmed'
],
'edit' => [
'first_name' => 'other',
'last_name' => 'other',
'email' => 'other',
'password' => 'other|min:5'
]
];
在控制器中:
$validator = Validator::make( $input, User::$rules['edit'] ); # Or User::$rules['create']
if ( $validator->fails() ) { code }
答案 3 :(得分:0)
据我所知,Ardent Package可以很好地处理Laravel的模型验证> 5.0。它似乎支持所有内置的验证功能(例如,有时使用'当你只想通过验证字段时)以及扩展它们。