Laravel 框架的一个困惑

前云 2017-03-07 04:59:35


看文档这个叫依赖注入 get_req(Request $request,$id=1);
1.这个Request在什么时候实例化的。
2.Request在哪里传进去的。
...全文
1864 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pharaoh_shi 2017-09-13
  • 打赏
  • 举报
回复

  
public function dispatch(Route $route, $controller, $method)
{
$parameters = $this->resolveClassMethodDependencies(
$route->parametersWithoutNulls(), $controller, $method
);
if (method_exists($controller, 'callAction')) {
return $controller->callAction($method, $parameters);
}
return $controller->{$method}(...array_values($parameters));
}

可以看到是通过 $this->resolveClassMethodDependencies() 方法获取参数依赖的。
你可以看一下 Laravel 的容器是怎么通过反射解决参数依赖问题的,然后再看路由传参
xiwanghope 2017-09-04
  • 打赏
  • 举报
回复
说白了就是一个规则,他看到你第一个参数是Request类型的,符合他的注入规则,所以他会自动把request实例传递给方法。如果你不表明第一个参数是Reqeust类型,你看看他还能注入不,肯定要报错的。
李士令 2017-05-24
  • 打赏
  • 举报
回复
这是类的多态性,就类似于定义方法的参数为int、array一样,这里是具体的某个类对象
xuzuning 2017-05-20
  • 打赏
  • 举报
回复
这是 php 的基本特征,与什么 Laravel、什么依赖注入没有关系 function get_req(Request $request,$id=1) 是让 php 帮你检查:参数 $request 是否是类 Request 的实例 #1 的例子不能说明这一点,改一下
class mm {
    public $str = 1;
}

class nn {
}

function abc(mm $abc){ // 限制参数必须是mm类的对象
    echo $abc->str;
}

$obj = new nn;
abc($obj);
Catchable fatal error: Argument 1 passed to abc() must be an instance of mm, instance of nn given, called
mmcawu 2017-05-20
  • 打赏
  • 举报
回复
依赖注入,指的是,每次自动化实例一个类的对象时,会判断类的构造函数,是否有参数;如果有参数,则判断参数是可实例化(由此判断参数的类型是否为类),如果是类,则继续自动化实例一个类的实例,以此类推下去。 这里,调用类中的一个方法,是laravel框架中,容器实现的一个特性,自动为方法实例化Request类的实例。
komyluo 2017-03-08
  • 打赏
  • 举报
回复
依赖注入,是框架会自动做的
qq_25705515 2017-03-08
  • 打赏
  • 举报
回复
看完还是不懂,慢慢来
傲雪星枫 2017-03-07
  • 打赏
  • 举报
回复
这个Request只是定义传入的参数必须是Request的对象,并不是要实例化Request 例如:


class mm{
    public $str = 1;
}

function abc(mm $abc){ // 限制参数必须是mm类的对象
    echo $abc->str;
}

$obj = new mm;
abc($obj);

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧