/** * On request received event, configure the router. * * @param DidReceiveRequest $event Event triggered when a request was received. */ public function onRequest(DidReceiveRequest $event) { $request = $event->getRequest(); $protocol = $request->getScheme(); $host = $request->getHost(); $port = $request->getPort(); if (!empty($protocol)) { $this->router->setProtocol($protocol); } if (!empty($host)) { $this->router->setHost($host); } if (!empty($port)) { $this->router->setPort($port); } }
/** * When the found controller method wants to have the request injected, * this method will do it. * * @param ControllerWillRespond $event Event triggered before execution of controller. */ public function injectRequest(ControllerWillRespond $event) { $route = $this->router->getRoute($event->getControllerName()); // find the method's meta data $methods = $route->getMethods(); $i = ArrayUtils::search($methods, 'method', $event->getMethod()); if ($i === false) { return; } $method = $methods[$i]; $arguments = $event->getArguments(); foreach ($method['params'] as $i => $param) { if ($param['class'] && Debugger::isExtending($param['class'], Request::class, true) && !$arguments[$i] instanceof Request) { $arguments[$i] = $this->request; } } $event->setArguments($arguments); }