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 メソッドの引数として呼び出される無名関数です。この無名関数の 2 つの引数はどのように機能しますか? 具体的には次のとおりです。

Application $app, Request $request?

ありがとう!

4

1 に答える 1

9

コントローラの引数が設定される暗黙的な方法は、おそらく silex の最も紛らわしい部分の 1 つです。

HTTP 動詞メソッドの 1 つを介してコントローラーを定義すると、そのコントローラーは引数に型ヒントを追加できます。RequestApplicationは、2 つの引数$appとの型ヒントです$request

これHttpKernelは、コントローラーの呼び出しを担当する Silex の一部です。ControllerResolver渡す引数を決定するためにa を使用します。ControllerResolverは型ヒントから引数を推測します。

  • Silex\Application型ヒントの場合、アプリケーションを挿入します。
  • 型ヒントの場合Symfony\Component\HttpFoundation\Request、現在のリクエストを挿入します。

理解を深めたい場合は、HttpKernel のソース コードを読むことをお勧めします。

于 2013-05-08T20:24:19.853 に答える