为什么这个函数可以在不使用Validator class的情况下验证用户输入?
Why this function is able to validate user input without using Validator class?
我正在研究一个 Laravel application,我发现这个应用程序有一些奇怪的行为。
此应用程序中有一些 Web 表单。大多数处理 POST 请求的控制器方法使用 Validator::make()
来验证用户输入,但我发现 2 个方法根本不使用 Validator::make()
。
起初我以为这2个表单没有输入验证。然而,令人惊讶的是,我发现网络表单仍然能够验证用户输入。
示例 1:
(使用验证器)
- Controller Method 1(第 60 - 67 行)
- Controller Method 2(第 62 - 68 行)
$rules = array(
'title' => 'required|min:3',
'content' => 'required|min:3'
);
...
$validator = Validator::make(Input::all(), $rules);
示例 2:
(未使用验证器)
- Controller Method 3(第 89 - 111 行)
- Controller Method 4(第 27 - 47 行)
$this->user->username = Input::get( 'username' );
$this->user->email = Input::get( 'email' );
$this->user->password = Input::get( 'password' );
...
$this->user->save();
我想知道为什么 示例 2 中的函数能够在不使用 Validator
的情况下验证用户输入?
此应用程序的用户模型使用 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
并使用它来验证当前模型。
我正在研究一个 Laravel application,我发现这个应用程序有一些奇怪的行为。
此应用程序中有一些 Web 表单。大多数处理 POST 请求的控制器方法使用 Validator::make()
来验证用户输入,但我发现 2 个方法根本不使用 Validator::make()
。
起初我以为这2个表单没有输入验证。然而,令人惊讶的是,我发现网络表单仍然能够验证用户输入。
示例 1: (使用验证器)
- Controller Method 1(第 60 - 67 行)
- Controller Method 2(第 62 - 68 行)
$rules = array(
'title' => 'required|min:3',
'content' => 'required|min:3'
);
...
$validator = Validator::make(Input::all(), $rules);
示例 2: (未使用验证器)
- Controller Method 3(第 89 - 111 行)
- Controller Method 4(第 27 - 47 行)
$this->user->username = Input::get( 'username' );
$this->user->email = Input::get( 'email' );
$this->user->password = Input::get( 'password' );
...
$this->user->save();
我想知道为什么 示例 2 中的函数能够在不使用 Validator
的情况下验证用户输入?
此应用程序的用户模型使用 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
并使用它来验证当前模型。