繁体   English   中英

Laravel解决关闭依赖

[英]Laravel resolving dependencies for a closure

Laravel能够自动将依赖项注入控制器构造等中。例如:

class Test {
    public function __construct(Request $request) {}
}

App::make('Test');

控制器的构造函数将接收适当的请求外观。

有办法用闭包做到这一点吗?

例如:

$closure = function(Request $input) {};
App::make($closure); // resolving the closure dependencies

不,这是不可能的,您可以在此处阅读IoC容器代码:

466行上的laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php

如您所见,它试图通过反射来解析和解析父类的__constructor方法。

我认为实现起来会很有趣,因为很可能通过扩展Container类来支持闭包。

我进行了一些测试以确保可行,因此这里是:

    class t4 {
        public $x = "inject me";
    }

    interface t5 {}

    $t3 = function(t4 $test) {
        return print($test);
    };
    $r = new ReflectionFunction($t3);
    $params = $r->getParameters();
    $injection = $params[0]->getClass();
    if (!$injection->isInstantiable()) {
        throw new Exception('Provided type hint is not instantiable');
    }
    $typehinted = $injection->newInstance();
    print($typehinted->x); // prints "inject me"

类型提示t5将引发异常。

这回答了问题

有办法用闭包做到这一点吗?

至于如何实现,我认为您应该对反射和Laravel IoC容器的工作原理有全面的了解。 我认为这不会在不久的将来实现,因为Laravel基本上是基于类构建的。 您有哪些用例?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM