Php 自定义Laravel中存储的模型验证规则
比如说,我在Laravel中有一个用户模型,如下所示:Php 自定义Laravel中存储的模型验证规则,php,validation,model,laravel,Php,Validation,Model,Laravel,比如说,我在Laravel中有一个用户模型,如下所示: class User extends Eloquent implements UserInterface, RemindableInterface { public static $rules = array( 'email' => 'required|email', 'password' => 'required|min:8|confirmed', 'password_
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中,是否有任何纯粹的方法可以针对不同的情况修改模型存储的验证规则?
我是否必须重新组织我的规则存储方法
谢谢 您可以在需要时动态添加规则 例如: 如果我是对的,那么在注册用户和更新密码时,您只需要确认
密码
规则。因此,在您的模型中,不要添加密码确认规则
public static $rules = array(
'email' => 'required|email',
'password' => 'required|min:8|confirmed'
}
如何动态添加规则:
要注册用户,需要password\u confirmation
字段。因此,在控制器中,您始终可以添加如下规则:
$rules = User::$rules;
$rules['password_confirmation'] = 'required|min:8';
有时您可能需要根据用户输入添加规则
例如:
如果用户选择澳大利亚作为国家,他们还必须选择一个州
$v = Validator::make($data, $rules ));
$v->sometimes('state', 'required', function($input)
{
return $input->country == 'Australia';
});
我是这样做的 在模型中:
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 }
游戏进行得很晚,但根据Laravel文档,您可以使用“有时”规则 简言之: 在某些情况下,您可能希望仅当输入数组中存在某个字段时,才对该字段运行验证检查。要快速完成此操作,请将“有时”规则添加到规则列表中:
'password_confirmation' => 'sometimes|required|min:8|confirmed'
据我所知,Ardent软件包可以很好地处理Laravel>5.0的模型验证。它似乎支持所有内置的验证功能(例如,当您只想验证通过的字段时使用“有时”)以及扩展它们
谢谢您的回答!动态添加规则是一个好主意,但是它不能为特定字段添加/删除特定规则!例如,字段
密码
具有规则已确认
(在模型中定义),但当不需要密码确认时,必须删除此规则!您不能添加或删除特定规则,但可以在使用规则之前重新设置规则<代码>$rules['password']='required | min:8'代码>