【问题标题】:Laravel: Validation within model. Multiple Validation rulesLaravel:模型内的验证。多重验证规则
【发布时间】: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) {

【问题讨论】:

  • 登录时验证不是模型工作。把它留给别的东西,因为模型应该只负责(如果你想要的话)创建一个新记录。验证登录凭据是另一回事,实际上您根本不需要它。除非有你想分享的理由?
  • 我没有验证登录,我正在尝试使用多个验证规则。

标签: php validation laravel model


【解决方案1】:

我通过将$rules 一起存储在我的模型方法中解决了这个问题。在此示例中,我正在验证用户更新。我在这个类中使用了一个 validate 类方法。事情可以组织得更好,但我正在努力。

这是来自我的 EloquentUserRepositoryUser 模型的代码,但我使用存储库。

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;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 2020-06-09
        • 2018-02-22
        • 1970-01-01
        • 2016-12-17
        • 2020-06-25
        • 2021-12-09
        相关资源
        最近更新 更多