比方说,我在Laravel中有一个User模型,如下所示:
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中不同情况的模型存储验证规则?我是否必须重新组织我的规则存储方法?
谢谢!
您可以在需要时动态添加规则.
例如:
如果我是对的,那么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'; });
游戏的后期,但根据Laravel文档,您可以使用"有时"规则.
http://laravel.com/docs/validation
简而言之:在某些情况下,只有在输入数组中存在该字段时,您可能希望对字段运行验证检查.要快速完成此操作,请将有时规则添加到规则列表中:
'password_confirmation' => 'sometimes|required|min:8|confirmed'
我这样做.
在模型中:
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 }