您如何向模型添加多个验证规则?
我创建了一个BaseModel,其中BaseModel扩展了Eloquent。 我的其他模型扩展了BaseModel。
模型/ BaseModel
class BaseModel extends Eloquent {
public $errors;
public function validate($data) {
$validation = Validator::make($data, static::$rules);
if($validation->passes()) {
return true;
}
$this->errors = $validation->messages();
return false;
}
}
模型/用户
protected static $rules = [
'email_address' => "required|email|unique:users,email_address",
'first_name' => "required",
'last_name' => "required",
'password' => "required|min:6|same:confirm_password",
'confirm_password' => "required:min:6|same:password",
];
以上规则适用于注册页面。
现在我的登录页面也将通过用户模型。
它应验证电子邮件地址和密码。
是否可以向模型添加多个验证规则。
我确信我可以让$ rules成为一个传递验证函数的变量,但这看起来并不干净。 例如
模型/ BaseModel
public function validate($data, $rules) {
答案 0 :(得分:0)
我通过将$rules
存储在我的模型方法中来解决这个问题。在这个例子中,我正在验证用户更新。我在这个类中使用了validate类方法。事情可以更好地组织,但我正在努力。
这是我的EloquentUserRepository
或User
模型中的代码,但我使用的是存储库。
EloquentUserRepository:
public function update($user) {
$rules = array(
"email" => "required|email",
"userrole" => "required"
)
if($this->validate(Input::all(), $rules)) {
$user->save();
return true;
} else {
return false;
}
}
private function validate($data, $rules) {
$validator = Validator::make($data, $rules);
if($validator->passes()) {
return true;
} else {
$this->errors = $validator->errors();
return false;
}
}
public function errors() {
return $this->errors()->all();
}
这很有效,可以保持我的控制器清洁,并在有意义的地方显示我的验证规则。
答案 1 :(得分:0)
也许您可以尝试各种类型的验证功能
例如:$ User-> validateUpdate然后在您的用户模型中
private function validateUpdate($data){
$validator = Validator::make($data, $this->updateRules);
if($validator->passes()) {
return true;
} else {
$this->errors = $validator->errors();
return false;
}
}
public function errors() {
return $this->errors()->all();
}
答案 2 :(得分:0)
我知道已经很久了,但如果有人想要更多答案,请回答
class LaravelValidation implements UsersValidation
{
/**
* Validate user inputs
*
* @param array $data
* @return bool
*
* @throws \Illuminate\Validation\ValidationException
*/
public function validate(array $data, $method='create'): bool
{
$rules = $this->$method();
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
if(request()->wantsJson())
{
return response()->json($validator->errors(), 400);
}
throw new ValidationException($validator);
}
return true;
}
public function social_login()
{
$rules = [
'access_token'=> ['required']
];
return $rules;
}