在过去的几天里,我一直在玩Silex。我无法理解以下代码段的工作原理。
我对它的不感兴趣,而是 它是如何做的。
use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
$app->get('/foo', function (Application $app, Request $request) {
$subRequest = Request::create('/', ...);
$response = $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
return $response;
});
我对此感到困惑
function (Application $app, Request $request)
根据我的理解,这是一个匿名函数,被称为$ app-> get方法的参数。这个匿名函数中的两个参数如何工作?具体是什么:
Application $app, Request $request
?
谢谢!
答案 0 :(得分:9)
控制器参数的隐式填充方式可能是silex中最令人困惑的部分之一。
当您通过其中一个HTTP谓词方法定义控制器时,该控制器可以向其参数添加类型提示。 Request
和Application
是两个参数$app
和$request
的类型提示。
HttpKernel
是Silex负责调用控制器的部分。它使用ControllerResolver
来确定要传入的参数。ControllerResolver
将从类型提示中推断出参数。
Silex\Application
类型提示,它将注入应用程序。Symfony\Component\HttpFoundation\Request
类型提示,它将注入当前请求。如果您想更好地理解,我建议您阅读the HttpKernel source code。