我正在研究Laravel application,我在这个应用程序中发现了一些奇怪的行为。
此应用程序中有一些Web表单。大多数处理POST请求的控制器方法使用Validator::make()
来验证用户输入,但我发现有两种方法根本不使用Validator::make()
。
起初我认为这两种形式没有输入验证。然而,令人惊讶的是,我发现Web表单仍然能够验证用户输入。
示例1: (使用Validator)
$rules = array(
'title' => 'required|min:3',
'content' => 'required|min:3'
);
...
$validator = Validator::make(Input::all(), $rules);
示例2: (不使用验证器)
$this->user->username = Input::get( 'username' );
$this->user->email = Input::get( 'email' );
$this->user->password = Input::get( 'password' );
...
$this->user->save();
我想知道为什么示例2 中的函数能够在不使用Validator
的情况下验证用户输入?
答案 0 :(得分:2)
此应用程序的用户模型使用ConfideUser
特征。如果我们看一下trait in the confide package,我们可以看到有一个save()
方法覆盖了Laravel中的默认方法。
/**
* Overwrites the original save method in order to perform
* validation before actually saving the object.
*
* @param array $options
*
* @return bool
*/
public function save(array $options = array())
{
if ($this->isValid()) {
return parent::save($options);
}
return false;
}
它会调用$this->isValid()
,只有在一切正常时才会保存。这里是isValid()
:
/**
* Checks if the current user is valid using the ConfideUserValidator.
*
* @return bool
*/
public function isValid()
{
// Instantiate the Zizaco\Confide\UserValidator and calls the
// validate method. Feel free to use your own validation
// class.
$validator = App::make('confide.user_validator');
// If the model already exists in the database we call validate with
// the update ruleset
if ($this->exists) {
return $validator->validate($this, 'update');
}
return $validator->validate($this);
}
它创建了一个confide自己的UserValidator
实例,并使用它来验证当前模型。