[英]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.