duangan1945 2018-08-06 04:51
浏览 170
已采纳

Laravel:类型提示的依赖注入如何工作?

If one uses in a controller something like

class ContactController extends Controller
{
    public function send(Request $request)
    {
        //...

then whenever the function send() is called without input, Laravel will automatically resolve the Request object from the Service Container. But where and how is this magic happening?

I checked the abstract class Illuminate\Routing\Controller which only has 4 methods, and none of theme seems to do the trick. I also noticed that if I do something like

class ContactController 
{
    public function send(Request $request)
    {
       //...

then whenever calling send() this will throw an Too few arguments to function.. error.

I don't know where else to look. If I google my question, I find plenty of post explaining how to use type hint but not how it actually works.

So where is the piece of code that resolves the object from the Service Container if I type hint it in a controller?

  • 写回答

1条回答 默认 最新

  • dongyishen5796 2018-08-06 05:04
    关注

    It actually doesn't use the container to call your controller method oddly enough even though the controller itself is resolved from the container (which would give you constructor injection from the container)

    Illuminate\Routing\Route@run -> runController() ->

    Illuminate\Routing\ControllerDispatcher uses Illuminate\Routing\RouteDependencyResolverTrait

    resolveClassMethodDependencies() -> resolveMethodDependencies() ... during this process is where the container is used to resolve instances for the dependencies that were gathered by direct reflection.

    The ControllerDispatcher ends up calling your method and passing the resolved parameters to it.

    It is doing what would seem similar to the container's call method.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?