/** * Handle the given request * * @param \React\Http\Request $request * @param \React\Http\Response $response */ public function handle($request, $response) { try { $serverAction = RequestInfoFactory::getServerActionForRequest($request); if ($serverAction) { // Handle a very special server action $this->handleServerAction($serverAction, $request, $response); return; } $delayedRequest = FALSE; $handler = $this->getHandlerForRequest($request); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest($request); $specialHandlerAction = RequestInfoFactory::getHandlerActionForRequest($request); $requestResult = FALSE; if ($specialHandlerAction) { // Handle a special handler action $requestResult = call_user_func(array($handler, $specialHandlerAction), $requestInfo); } else { if (!$requestInfo->getDatabaseIdentifier()) { // Show the welcome message $requestResult = $handler->noRoute($requestInfo); } else { // Run normal methods $method = $request->getMethod(); switch ($method) { case 'POST': case 'PUT': $delayedRequest = TRUE; $this->waitForBodyAndPerformAction($request, $response, $requestInfo); break; case 'GET': $requestResult = $handler->read($requestInfo); break; case 'DELETE': $requestResult = $handler->delete($requestInfo); break; default: $requestResult = new HandlerResult(405, new InvalidRequestMethodException(sprintf('Request method "%s" not valid', $method)), 1413033763); } } } if (!$delayedRequest) { $this->handleResult($requestResult, $request, $response); } } catch (LogicException $exception) { $this->handleError($exception, $request, $response); } catch (RuntimeException $exception) { $this->handleError($exception, $request, $response); } catch (\Exception $exception) { $this->writeln('Caught exception #%d: %s', $exception->getCode(), $exception->getMessage()); $this->writeln($exception->getTraceAsString()); } }
/** * @test */ public function getServerActionForRequestTest() { $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_restart'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_restart'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_restart'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_restart'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_restart/something'))); $this->assertEquals('restart', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_restart'))); $this->assertEquals('restart', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_restart/'))); $this->assertEquals('restart', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_shutdown'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_shutdown/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_shutdown/something'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_shutdown'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_shutdown/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_shutdown/something'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_shutdown'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_shutdown/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_shutdown/something'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_shutdown'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_shutdown/'))); $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_shutdown/something'))); $this->assertEquals('shutdown', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_shutdown'))); $this->assertEquals('shutdown', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_shutdown/'))); $this->assertEquals('shutdown', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_shutdown/something'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_stop'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_stop/'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('GET', '/_stop/something'))); // // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_stop'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_stop/'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('HEAD', '/_stop/something'))); // // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_stop'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_stop/'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('PUT', '/_stop/something'))); // // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_stop'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_stop/'))); // $this->assertFalse(RequestInfoFactory::getServerActionForRequest(new Request('DELETE', '/_stop/something'))); // // $this->assertEquals('stop', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_stop'))); // $this->assertEquals('stop', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_stop/'))); // $this->assertEquals('stop', RequestInfoFactory::getServerActionForRequest(new Request('POST', '/_stop/something'))); }