1

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

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

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

4

2 回答 2

2

您所看到的称为依赖注入。在 Laravel 调用该方法之前,它会使用PHP 反射功能store()分析其签名,并通过 IoC 容器解析所有类型提示类的参数。这就是自动注入当前请求的方式。

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

不起作用:

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

作品:

public function store(Request $request, $foo = 'bar'){
于 2015-04-25T06:56:58.743 回答
1

这些由 Laraval IoC 注入,例如 Inversion of Control 容器,称为方法注入。这是让 Laravel 如此神奇的原因之一。

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

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

于 2015-04-25T06:55:43.847 回答