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

时间:2019-06-04 14:57:02

标签: php validation laravel-5 laravel-5.8

在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. 如果成功,则在数组中返回经过验证的数据。

那么,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();    
}

1 个答案:

答案 0 :(得分:2)

至少在目前看来,使用这两种方法都是安全的。 Here's the source for validate()

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

    return $this->validated();
}

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

也就是说,我个人将使用validate()进行验证,并使用validated()来获取经过验证的数据。这样可以避免将来对validate()函数的潜在更改(例如,如果更改为返回true / false的话),并使代码的可读性更高。