Laravel:模型中的验证。多个验证规则

时间:2014-05-09 00:17:48

标签: php validation laravel model

您如何向模型添加多个验证规则?

我创建了一个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) {

3 个答案:

答案 0 :(得分:0)

我通过将$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();
}

这很有效,可以保持我的控制器清洁,并在有意义的地方显示我的验证规则。

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