Laravel 5.8、PHP中的validate()和validated()函数有什么区别?

What is the difference between validate() and validated() function in Laravel 5.8, PHP?

我在 laravel.com 网站的文档中找不到 validate()validated() 函数之间的不同定义。

但是在Validator接口文件中,我看到函数的注释如下:

/**
 * Run the validator's rules against its data.
 *
 * @return array
 */
public function validate();

/**
 * Get the attributes and values that were validated.
 *
 * @return array
 */
public function validated();

我确实理解这些评论,但是当我编写代码并测试这两个函数时,我没有发现任何区别。两者似乎表现相同:

  1. 验证数据。
  2. 如果失败,将用户重定向到他们之前的页面。
  3. 如果成功,return 验证数组中的数据。

那么,Laravel 5.8中这两个函数有什么区别呢?

在我的例子中,我使用如下验证,因为我不想在验证失败时将用户重定向回他们之前的页面。

$validator = validator($array_data, $array_rules, $array_message);

if ($validator->fails()) {
    // Do something
} else {
    $validated_data = $validator->validate();
    // Here I am not sure if I should use the validated() function, because I do not see the difference between these two functions.
    // $validated_data = $validator->validated();    
}

看起来两者都可以安全使用,至少目前是这样。 Here's the source for validate():

public function validate()
{
    if ($this->fails()) {
        throw new ValidationException($this);
    }

    return $this->validated();
}

如您所见,return 值是 validated() 的结果。

也就是说,我个人会使用 validate() 来执行验证,并使用 validated() 来获取经过验证的数据。这应该使您免受将来对 validate() 函数的潜在更改(例如,如果它更改为 return 和 true/false)并导致代码更具可读性。