Laravel控制器方法如何获取参数?

How the Laravel controller method get the parameters?

我正在研究一些 Laravel 控制器方法。在某些控制器方法中,有一些参数,但它们不是来自路由参数。例如,

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required|unique|max:255',
        'body' => 'required',
    ]);
}

Laravel控制器方法如何获取参数?谁提供的参数$request? Laravel如何区分路由参数和此类参数?

这些是由 Laraval IoC 注入的,例如控制反转容器,并称为方法注入。这是让 Laravel 如此惊人的原因之一。

当您键入一个变量时,Laravel 会根据上下文为您创建一个。

更多信息来自 http://laravel.com/docs/5.0/container#introduction

你看到的就是所谓的依赖注入。在 Laravel 调用 store() 方法之前,它使用 PHPs Reflection capabilities 分析它的签名,并通过 IoC 容器解析类型提示 class 的所有参数。这就是自动注入当前请求的方式。

解析完这些参数后,路由参数就会被传递。因为类型提示参数首先被解析,所以它们是在参数列表的开头、中间还是结尾并不重要。唯一重要的情况是使用可选路由参数:

无效:

public function store($foo = 'bar', Request $request){

作品:

public function store(Request $request, $foo = 'bar'){