1

在过去的几天里,我一直在玩 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?

谢谢!

4

1 回答 1

9

填充控制器参数的隐式方式可能是 silex 最令人困惑的部分之一。

当您通过 HTTP 动词方法之一定义控制器时,该控制器可以向其参数添加类型提示。RequestApplication是两个参数的类型提示$app$request

HttpKernel是 Silex 负责调用控制器的部分。它使用 aControllerResolver来确定要传入哪些参数。ControllerResolver将从类型提示中推断出参数。

  • 对于Silex\Application类型提示,它将注入应用程序。
  • 对于Symfony\Component\HttpFoundation\Request类型提示,它将注入当前请求。

如果你想更好地理解,我建议阅读HttpKernel 源代码

于 2013-05-08T20:24:19.853 回答