laravel6のソースコードについて質問させていただきます。
RequestインスタンスのrequestUriにどのタイミングでURLが格納されるのかを特定しようとしており、関連するソースコードを読んでおります。
Xdebug等を駆使し、createFromBaseメソッドによって作られた空のRequestインスタンスをIlluminate\Foundation\Http\KernelクラスのsendRequestThroughRouterメソッドに渡すと、渡されたRequestインスタンスのrequestUriに値が格納されるというところまで突き止めました。
問題はそこから先で、sendRequestThroughRouterメソッドがどのようにしてrequestUriを取得しているのかがわかりません。SendRequestThroughRouterメソッドの一番最後の行で呼んでいるthen($this->dispatchToRouter())がどのような挙動になっているのか、どうしても理解できないからです。
特に、dispatchToRouter()については、ソースコードを見ると、単にクロージャを返しているだけのようなのですが、そのクロージャは引数として$requestを受け取ることとなっています。この$requestは呼び出し元であるsendRequestThroughRouterメソッドに渡された$requestのことかなと思ったのですが、自分の雑なPHPの理解では、クロージャに外部から引数を渡すときはuseを使う必要があるのではと思い、この$requestにどこからどうやって値が渡るのかがわからず、これ以上コードを読み進めることができずにいます。
有識者の方、ご指導のほど、どうぞよろしくお願いいたします。
Laravel
1 2namespace Illuminate\Foundation\Http; 3 4class Kernel implements KernelContract 5{ 6 7// 一部抜粋 8 9 protected function sendRequestThroughRouter($request) 10 { 11 $this->app->instance('request', $request); 12 13 Facade::clearResolvedInstance('request'); 14 15 $this->bootstrap(); 16 17 return (new Pipeline($this->app)) 18 ->send($request) 19 ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware) 20 ->then($this->dispatchToRouter()); 21 } 22 23 protected function dispatchToRouter() 24 { 25 return function ($request) { //この$requestにはどこからどうやって値が渡るのか 26 $this->app->instance('request', $request); 27 28 return $this->router->dispatch($request); 29 }; 30 } 31
回答1件
あなたの回答
tips
プレビュー