Laravel:模型内的验证。多重验证规则
Posted
技术标签:
【中文标题】Laravel:模型内的验证。多重验证规则【英文标题】:Laravel: Validation within model. Multiple Validation rules 【发布时间】:2014-06-26 14:42:20 【问题描述】:如何向模型添加多个验证规则?
我创建了一个 BaseModel,其中 BaseModel 扩展了 Eloquent。 我的其他模型扩展了 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 成为一个变量,它通过了验证函数,但这看起来并不干净。 例如
模型/基础模型
public function validate($data, $rules)
【问题讨论】:
登录时验证不是模型工作。把它留给别的东西,因为模型应该只负责(如果你想要的话)创建一个新记录。验证登录凭据是另一回事,实际上您根本不需要它。除非有你想分享的理由? 我没有验证登录,我正在尝试使用多个验证规则。 【参考方案1】:我通过将$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();
这很好用,让我的控制器保持清洁,并在有意义的地方显示我的验证规则。
【讨论】:
【参考方案2】:也许您可以尝试各种类型的验证功能 例如: $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();
【讨论】:
【参考方案3】:我知道已经很久了,但如果有人想要更多答案,请回答
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;
【讨论】:
以上是关于Laravel:模型内的验证。多重验证规则的主要内容,如果未能解决你的问题,请参考以下文章