PHP Silex微框架语法解释

时间:2013-05-08 20:01:20

标签: php symfony silex

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

谢谢!

1 个答案:

答案 0 :(得分:9)

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

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

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

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

如果您想更好地理解,我建议您阅读the HttpKernel source code