为什么validate()方法可以通过request()访问?

rap*_*2-h 8 php laravel laravel-5 laravel-validation laravel-5.5

引用Laravel文档

默认情况下,Laravel的基本控制器类使用ValidatesRequests特性,该特性提供了一种方便的方法来使用各种强大的验证规则来验证传入的HTTP请求

的确,阅读代码App\Http\Controllers\Controller实际上使用了ValidatesRequests特征。并ValidatesRequests有一种validate方法。

我真正感到奇怪的是,文档中的其他所有地方,该validate方法都是在$request对象上调用的。它以这种方式工作。我可以使用以下代码验证表单:

public function store()
{
    $attributes = request()->validate([
        'name' => 'required|string|max:255',
    ]);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是我看不到Request类上存在任何validate方法。文件开头只是一个奇怪的注释行:

/**
 * @method array validate(array $rules, array $messages = [], array $customAttributes = [])
 */
Run Code Online (Sandbox Code Playgroud)

因此,有两件事:

  • 我不知道该信任Laravel文档。
  • 而且我不了解验证如何在$request对象上进行。

我的实际问题是:

如果我validate通过$request对象使用方法,从文档粘贴的初始引号是否仍然正确?如果是这样,它如何运作?

cee*_*yoz 6

几天前,那个“奇怪的评论”被删除了

我相信从FoundationServiceProvider.php 中的调用中Request获取其validate功能。有关宏的更多信息,请参阅此文章Request::macro('validate', ...)