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 会根据上下文为您创建一个。
你看到的就是所谓的依赖注入。在 Laravel 调用 store()
方法之前,它使用 PHPs Reflection capabilities 分析它的签名,并通过 IoC 容器解析类型提示 class 的所有参数。这就是自动注入当前请求的方式。
解析完这些参数后,路由参数就会被传递。因为类型提示参数首先被解析,所以它们是在参数列表的开头、中间还是结尾并不重要。唯一重要的情况是使用可选路由参数:
无效:
public function store($foo = 'bar', Request $request){
作品:
public function store(Request $request, $foo = 'bar'){
我正在研究一些 Laravel 控制器方法。在某些控制器方法中,有一些参数,但它们不是来自路由参数。例如,
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|unique|max:255',
'body' => 'required',
]);
}
Laravel控制器方法如何获取参数?谁提供的参数$request
? Laravel如何区分路由参数和此类参数?
这些是由 Laraval IoC 注入的,例如控制反转容器,并称为方法注入。这是让 Laravel 如此惊人的原因之一。
当您键入一个变量时,Laravel 会根据上下文为您创建一个。
你看到的就是所谓的依赖注入。在 Laravel 调用 store()
方法之前,它使用 PHPs Reflection capabilities 分析它的签名,并通过 IoC 容器解析类型提示 class 的所有参数。这就是自动注入当前请求的方式。
解析完这些参数后,路由参数就会被传递。因为类型提示参数首先被解析,所以它们是在参数列表的开头、中间还是结尾并不重要。唯一重要的情况是使用可选路由参数:
无效:
public function store($foo = 'bar', Request $request){
作品:
public function store(Request $request, $foo = 'bar'){