【问题标题】:What is the difference between validate() and validated() function in Laravel 5.8, PHP?Laravel 5.8,PHP中的validate()和validated()函数有什么区别?
【发布时间】:2019-10-20 03:14:32
【问题描述】:

我在 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();

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

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

【问题讨论】:

  • 旁注:我真的很努力避免直接调用验证器。考虑改用 FormRequest 类。

标签: php validation laravel-5 laravel-5.8


【解决方案1】:

看起来两者都可以安全使用,至少目前是这样。 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),并导致代码的可读性略高。

【讨论】:

  • 如果你同时使用了validate()和validated()函数,就像你调用了两次validated()函数一样。你不觉得没有必要吗?
  • 就像我说的,这是我个人的看法。我觉得它会导致代码更具可读性,并且对性能的影响完全可以忽略不计。你可以不同意。
猜你喜欢
  • 2020-01-02
  • 2021-09-09
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多